Repaso
English

¿Qué es la Dependency Injection (DI)?

Opciones

  1. Una clase crea todos los objetos que necesita con new
  2. Una clase declara lo que necesita y un contenedor se lo da (Opción correcta)
  3. Copiar una tabla de base de datos a otro esquema
  4. Una técnica para inyectar código JavaScript en páginas web

Respuesta

Una clase declara lo que necesita y un contenedor externo le proporciona esos objetos, normalmente a través del constructor

Por qué

Sin DI, OrderService escribiría new PaymentGateway() dentro de sí misma, así que queda atada a esa clase exacta y es difícil de probar.

Con DI, OrderService recibe un PaymentGateway (normalmente una interface) por su constructor. Spring decide qué implementación darle.

Ventajas: bajo acoplamiento, fácil reemplazo, y en los unit tests puedes pasar un fake o un mock.

@Service
public class OrderService {
    private final PaymentGateway gateway;

    public OrderService(PaymentGateway gateway) {   // injected by Spring
        this.gateway = gateway;
    }
}

Recuerda

No crees tus dependencias; recíbelas.

Términos clave

Practica esta pregunta en Repaso