Inyección de Dependencias Flashcards
Explicar el patron de INYECCION DE DEPENDENCIAS
En el siguiente ejemplo tenemos una clase ClienteServicio que debe utilizar la clase ClienteRepositorio para consultar la base de datos y traer clientes.
public class ClienteServicio { private ClienteRepositorio clienteRepositorio = new ClienteRepositorio(); public String obtenerCliente(){ clienteRepositorio.getCliente(); } ... }
El código de arriba decimos que esta acoplado, porque si el día de mañana debo actualizar la clase ClienteRepositorio, también tengo que cambiar el código de la clase ClienteServico.
Se puede solucionar este problema con la inyección de dependencias y la utilización de interfaces.
Por ejemplo, se puede hacer la inyección desde el constructor:
public class ClienteServicio { private ClienteRepositorio clienteRepositorio; public ClienteServicio(ClienteRepositorio cr){ this.clienteRepositorio = cr; } . . . }
Y a su vez, el ClienteRepositorio debe ser una interfaz y que existan implementaciones por ejemplo repositorioSQL, repositorioPostgress.
Luego puedo elegir que repositorio inyectar y si este cambia, no hay problema con el código de la clase ClienteServicio.
En vez de que la clase Cliente instancie el servicio, se lo “inyecto” desde fuera.
- También se lo podría hacer en el setter, en vez del constructor.
- Spring lo hace automaticamente con una anotacion @Autowired.
public class ClienteServicio { @Autowired private ClienteRepositorio clienteRepositorio; . . . }