EJEMPLO 1 — Sin Inyección de Dependencias (SIN DI, SIN IoC)
La clase crea sus propias dependencias.
// Clase Motor
class Motor {
void encender() {
System.out.println("El motor se encendió.");
}
}
// Clase Carro SIN inyección de dependencias
class Carro {
// ❌ El carro crea su propio motor (mala práctica)
private Motor motor = new Motor();
void conducir() {
motor.encender(); // Usa el motor que él mismo creó
System.out.println("El carro está conduciendo.");
}
}
public class Main {
public static void main(String[] args) {
Carro carro = new Carro(); // Carro crea internamente su motor
carro.conducir();
}
}
🔍 ¿Qué pasa aquí?
Carro crea su propio Motor.
Carro depende directamente de la clase concreta Motor.
No puedo cambiar el motor sin cambiar el código del carro.
NO hay inversión de control → Carro controla todo.
EJEMPLO 2 — Con Inyección de Dependencias (CON DI, CON IoC)
La dependencia se entrega desde afuera.
// Clase Motor
class Motor {
void encender() {
System.out.println("El motor se encendió.");
}
}
// Clase Carro CON inyección de dependencias
class Carro {
private Motor motor;
// ✔️ Inyección por constructor
// El motor NO se crea aquí, SE RECIBE desde afuera
Carro(Motor motor) {
this.motor = motor;
}
void conducir() {
motor.encender();
System.out.println("El carro está conduciendo.");
}
}
public class Main {
public static void main(String[] args) {
Motor motor = new Motor(); // ✔️ Creamos el motor afuera
Carro carro = new Carro(motor); // ✔️ Se lo inyectamos al carro
carro.conducir();
}
}
¿Qué pasa aquí?
- El motor NO lo crea el carro, viene inyectado desde afuera.
- El carro solo usa el motor, no sabe cómo se crea.
- Hay inversión de control → otro decide cómo crear las dependencias.
- Puedo cambiar el motor sin tocar el código del carro.
🟦 1. ¿Qué hace Spring exactamente?
Spring tiene un componente llamado:
🧰 IoC Container (o Spring Container)
Este contenedor es el que:
crea tus objetos (Beans),
los mantiene vivos,
inyecta sus dependencias,
decide cuándo crearlos y cómo.
👉 Tú ya no creas objetos con new. Spring los crea por ti.
Eso es Inversión de Control (IoC).
2. ¿Qué es un Bean?
Un Bean es simplemente un objeto administrado por Spring.
Si Spring lo crea → es un BEAN.
Si tú lo creas con new → NO es un BEAN.
🟧 3. ¿Cómo se vuelve algo un Bean? → Anotaciones
Hay tres formas principales:
⭐ Forma 1: Componentes automatizados
Spring los detecta escaneando el proyecto.
@Component
@Service
@Repository
@Controller
@RestController