Inyección de dependencias

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 ha…


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:

  1. Crear C y E
  2. Luego creamos B usando E
  3. 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


Print Share Comment Cite Upload Translate Updates
APA

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/

MLA
" » Inyección de dependencias." Elías Canales | Sciencx - Friday August 15, 2025, https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/
HARVARD
Elías Canales | Sciencx Friday August 15, 2025 » Inyección de dependencias., viewed ,<https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/>
VANCOUVER
Elías Canales | Sciencx - » Inyección de dependencias. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/
CHICAGO
" » Inyección de dependencias." Elías Canales | Sciencx - Accessed . https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/
IEEE
" » Inyección de dependencias." Elías Canales | Sciencx [Online]. Available: https://www.scien.cx/2025/08/15/inyeccion-de-dependencias/. [Accessed: ]
rf:citation
» Inyección de dependencias | Elías Canales | Sciencx | 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.

You must be logged in to translate posts. Please log in or register.