MÓDULO 5 - Spring Core: IoC y DI Avanzado
¡Bienvenido al Módulo 5! 🎯
Ha utilizado la inyección de dependencias en los módulos anteriores, pero ¿realmente entiende cómo funciona?
Este módulo le revela los secretos internos de Spring y le hace autónomo para gestionar cualquier situación de inyección de dependencias.
🎓 Objetivos de Aprendizaje
Al final de este módulo, usted será capaz de:
- ✅ Explicar qué es la Inversión de Control (IoC)
- ✅ Dominar los 3 tipos de inyección de dependencias
- ✅ Crear y gestionar Beans de Spring
- ✅ Utilizar los ámbitos apropiados (@Singleton, @Prototype, etc.)
- ✅ Configurar Spring con @Configuration y @Bean
- ✅ Gestionar los perfiles (dev, test, prod)
📚 Prerrequisitos
Antes de comenzar este módulo, debe haber:
- ✅ Completado los Módulos 1 a 4
- ✅ Utilizado la inyección por constructor en sus trabajos prácticos
- ✅ Comprendido la arquitectura de 3 capas (Controller, Service, Repository)
¡Si estos prerrequisitos no están adquiridos, regrese a los módulos anteriores!
🗺️ Plan del Módulo
Parte Teórica (4 capítulos)
Capítulo 1: Inversión de Control (IoC)
Duración: 30 minutos
Contenido:
- ¿Qué es IoC?
- El problema del acoplamiento fuerte
- Cómo Spring resuelve este problema
- El Contenedor Spring (ApplicationContext)
¿Por qué es importante? Comprender el principio fundamental de Spring
Capítulo 2: Inyección de Dependencias (DI)
Duración: 45 minutos
Contenido:
- Los 3 tipos de inyección (constructor, setter, field)
- Por qué se prefiere la inyección por constructor
- @Autowired, @Inject, @Resource
- Dependencias opcionales
¿Por qué es importante? Elegir el método de inyección adecuado
Capítulo 3: Beans y Contexto Spring
Duración: 45 minutos
Contenido:
- ¿Qué es un Bean?
- @Component, @Service, @Repository, @Controller
- @Bean y @Configuration
- Nomenclatura de beans
- @Qualifier y @Primary
¿Por qué es importante? Dominar la creación y gestión de objetos Spring
Capítulo 4: Ámbitos y Configuración
Duración: 45 minutos
Contenido:
- Ámbitos: @Singleton, @Prototype
- Ámbitos web: @RequestScope, @SessionScope
- Configuración Java vs XML
- Perfiles (@Profile) para dev/test/prod
- @ComponentScan
¿Por qué es importante? Controlar el ciclo de vida y la configuración
Parte Práctica (3 TPs)
TP5.1: Inyección de Dependencias Avanzada
Duración: 1h30
Objetivo: Dominar los diferentes tipos de inyección
Usted va a crear:
- Varios servicios con diferentes métodos de inyección
- Gestionar dependencias circulares
- Utilizar @Qualifier para elegir la implementación
TP5.2: Beans y Ámbitos
Duración: 1h30
Objetivo: Comprender los ámbitos y su impacto
Usted va a crear:
- Beans con diferentes ámbitos
- Probar @Singleton vs @Prototype
- Crear beans personalizados con @Bean
TP5.3: Configuración por Perfiles
Duración: 1h30
Objetivo: Gestionar múltiples entornos
Usted va a crear:
- Configuración para dev, test, prod
- Beans condicionales según el perfil
- application-{profile}.properties
📊 Duración Total
| Tipo | Duración |
|---|---|
| Teoría | 2h45 (4 capítulos) |
| Práctica | 4h30 (3 TPs) |
| Total | 7h15 (~2-3 sesiones) |
🎯 Lo Que Va a Comprender
Antes de este Módulo
// Usted escribía esto sin realmente entender:
@Service
public class MyService {
private final MyRepository repo;
public MyService(MyRepository repo) {
this.repo = repo;
}
}
Preguntas sin respuesta:
- ¿Por qué @Service?
- ¿Cómo sabe Spring que debe crear MyRepository?
- ¿Por qué inyección por constructor?
- ¿Cuándo se crean estos objetos?
Después de este Módulo
// Usted comprenderá TODO:
@Service // ← Spring gestiona este bean (singleton por defecto)
public class MyService {
private final MyRepository repo; // ← Inmutable (buena práctica)
// ← Inyección por constructor (recomendado)
public MyService(MyRepository repo) {
this.repo = repo; // ← Spring inyecta automáticamente
}
}
Usted sabrá:
- ✅ Cómo Spring crea y gestiona los objetos
- ✅ Cuándo usar @Component, @Service, @Repository
- ✅ Cómo gestionar varias implementaciones
- ✅ Cómo configurar para diferentes entornos
- ✅ Los diferentes ámbitos y su utilidad
🚀 Por Qué Este Módulo Es Importante
1. Comprender los Fundamentos
Spring Boot "oculta" mucha complejidad con su auto-configuración. Es bueno para empezar rápido, pero usted debe entender lo que sucede "bajo el capó".
Ejemplo concreto:
Error frecuente: "No qualifying bean of type X found"
Sin este módulo: 😰 Busca en StackOverflow
Con este módulo: 😎 Entiende y resuelve el problema en 2 minutos
2. Escribir Código Profesional
Los desarrolladores junior copian código sin entender.
Los desarrolladores senior comprenden y adaptan según el contexto.
Este módulo le hace pasar de junior a senior en Spring Core.
3. Preparación para Entrevistas
Las preguntas sobre IoC, DI y los beans de Spring son extremadamente frecuentes en entrevistas técnicas.
Preguntas típicas:
- "Explique la Inversión de Control"
- "¿Cuál es la diferencia entre @Component y @Bean?"
- "¿Cuándo usar @Qualifier?"
- "Explique los ámbitos de los beans"
¡Después de este módulo, tendrá todas las respuestas!
🗺️ Progresión en la Formación
Módulo 1: Introducción Spring Boot
Módulo 2: Primeros Pasos (Initializr, Estructura, Config)
Módulo 3: Arquitectura 3 Capas
Módulo 4: Bases de Datos Producción
Módulo 5: ← USTED ESTÁ AQUÍ - Spring Core (IoC/DI)
Comprender los fundamentos
Módulo 6: Spring Data JPA Avanzado
Módulo 7+: Conceptos avanzados
Módulo 5 = ¡El momento en que realmente entiende Spring!
📖 Cómo Abordar Este Módulo
Teoría ANTES de la Práctica
-
Lea los 4 capítulos teóricos en orden
- No salte ningún capítulo
- Tome notas
- Pruebe los pequeños ejemplos
-
Realice los TPs en orden
- TP5.1: Inyección
- TP5.2: Beans y Ámbitos
- TP5.3: Configuración
-
Revise el resumen de cada capítulo
Tiempo Recomendado
Opción Intensiva (1 fin de semana):
- Sábado por la mañana: Capítulos 1 y 2 + TP5.1
- Sábado por la tarde: Capítulo 3 + TP5.2
- Domingo por la mañana: Capítulo 4 + TP5.3
- Domingo por la tarde: Revisión y ejercicios
Opción Progresiva (2 sesiones):
- Sesión 1: Capítulos 1-2 + TP1
- Sesión 2: Capítulos 3-4 + TP5.2 y TP5.3
✅ Autoevaluación
Antes de comenzar, responda:
- ¿Sabe qué significa IoC? ☐ Sí ☐ No
- ¿Conoce los 3 tipos de inyección? ☐ Sí ☐ No
- ¿Comprende la diferencia entre @Component y @Bean? ☐ Sí ☐ No
- ¿Sabe qué es un ámbito de bean? ☐ Sí ☐ No
Si ha respondido "No" a una sola pregunta → ¡Este módulo es para usted!
Después del módulo, repita este test. ¡Deberá responder "Sí" a TODO!
🎯 Próximo Paso
¿Listo para comprender Spring en profundidad?
➡️ Comenzar con el Capítulo 1: Inversión de Control