This content originally appeared on DEV Community and was authored by Elías Canales
Dependency injection & Inversion of control
La inyección de dependencias es bastante sencillo, consiste en no crear las dependencias dentro de una clase, si no hacerlo fuera de la clase y luego setear esas dependencias al objeto. Esto podríamos hacerlo por constructor, método o atributo.
Si por ejemplo tenemos un objeto A con dos dependencias (B y C), donde B depende de E. Pero E y C no dependen de ninguna otra clase.
Podemos:
- Crear C y E
- Luego creamos B usando E
- Y finalmente creamos A usando B y C
Usar este patrón permite mejorar el mantenimiento de la aplicación y facilita los test.
Mejora el mantenimiento porque no necesitamos ir a todas las clases que instancian un determinado objeto, cuando su constructor cambiar. O cuando simplemente tiene una nueva dependencia.
Facilita los test porque podemos pasar la dependencia que nosotros queramos, y eso nos ayuda a hacer que los test se adapten a lo que necesitamos testear. Si se trata de una clase muy compleja, podemos pasar un mock.
Ahora ya estamos aplicando inyección de dependencias, pero podemos observar un problema. ¿Que pasa si tenemos una aplicación más grande? Manejar la creación de todos los objetos puede ser mucho trabajo.
Y podría acabar volviéndose muy complicado, ademas de que pueden generarse situaciones de dependencia circular que nosotros no vamos a ser capaces de detectar en aplicaciones grandes.
Por eso, frameworks como Spring tienen su propio sistema para inyectar las dependencias. Para eso hacen uso de Inversion of Control (IoC), nosotros le damos el control al framework para que maneje el flujo del programa. Ya sea por archivos de configuración o anotaciones, el framework acaba creando esos objetos y sus dependencias.
Gracias a la DI y IoC haciendo uso de la abstracción, podemos cambiar la implementación de clases de nuestro programa con muy pocas modificaciones. Un caso de uso muy habitual son las bases de datos.
Podemos cambiar fácilmente de tener en producción una implementación para MySQL, y en los test una implementación para H2.
Referencias
Joshua Bloch, Effective Java (3ª edición), Addison-Wesley, 2018.
https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
This content originally appeared on DEV Community and was authored by Elías Canales

Elías Canales | Sciencx (2025-08-15T12:00:00+00:00) Inyección de dependencias. Retrieved from https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.