¿Qué es la Dependency Injection (DI)?
Opciones
- Una clase crea todos los objetos que necesita con
new - Una clase declara lo que necesita y un contenedor se lo da (Opción correcta)
- Copiar una tabla de base de datos a otro esquema
- 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.