Inversión de Control (IoC) - Inyección de dependencias (DI)
En los comienzos de la programación, los programas eran lineales y monolíticos. El flujo de ejecución era simplemente ejecutar línea tras linea.
Aparecieron dos conceptos que revolucionaron la programación: la modularidad y la reutilización de los componetes: se crean librerías de componentes reutilizables. El flujo se complica, saltando de componente a componente, y aparece un nuevo problema: la dependencia (acoplamiento) entre nuestros componentes.
El problema se empieza a considerar lo suficientmente importante como para definir nuevos conceptos en el diseño :
- Inversion of Control (IoC)
- Dependency Injection (DI)
La utilización de interfaces y la aparición de los frameworks es un primer paso para minimizar estas dependencias entre componentes, aunque pagamos un precio: la configuración en ficheros xml se empieza a volver monolítica, difícil de mantener, crítica y es fácil cometer errores.
Inversion of Control
Es una técnica que inverte el flujo tradicional. Lo tradicional es que el código que implementes llame a las librerías; la inversión de control ocurre cuando son las librerías las que llaman a tu código.
En Spring, la inversión de control consiste en ceder el control a una entidad externa a la aplicación, llamada "Contenedor", que se encargará de gestionar las instancias (así como sus creaciones y destrucciones).
Dependency Injection
Es un término comunmente confundido con el anterior.
En un escenario en el que utilizamos IoC, delegamos en una entidad "Contenedor" no solo la gestión de las instancias, sino la inyección de las sub-partes (dependencias). Si una venta se compone de un cliente y un producto, al instanciar un objeto venta la DI le inyecta directamente su cliente y su producto específicos.
Un ejemplo podría ser una cadena de montaje:
Tradicionalmente se encendía la cinta de montaje cuando se necesitase (instanciamos un objeto), los componentes eran transportados por la cinta y cada operario ensamblaba secuencialmente un componente para obtener un producto final (el objeto instanciado con todas sus propiedades concretas), y finalmente se apagaba la cinta cuando ya no era necearia (destruimos el objeto).
Utilizando IoC y DI, es un robot ("Contenedor") quien detecta cuando se necesita un objeto, pone automáticamente en marcha una cinta, ensambla sus partes y nos devuelve nuestro objeto final volviendo a su estado de stand-by hasta el siguiente pedido.
Más información




























Lennon Shimokawa dijo
27 de March del 2008 a las 8:58 pm
Hola Jerónimo, muy buen post, para aclarar los términos de Inversión of Control y Depedency Injection, este último término fue acuñado por Martin Fowler para referirse más especÃficamente a “¿que aspecto estamos invirtiendo?” en la Inversión de Control. Lo que se invierte son el manejo de las depedencias de los objetos, de ahi nace el término Dependency Injection.
http://martinfowler.com/articles/injection.html
yoyoooyoy dijo
28 de March del 2008 a las 8:11 am
Gracias Lennon,
creo que existe una gran confusión con estos conceptos porque todos nos hemos preocupado por él después de Spring y pensamos que lo que hace Spring es IoC y DI y no hay más
Lycka Bonita » Spring - MVC : Capa de negocio dijo
4 de July del 2008 a las 8:37 am
[...] ahora vamos a sacar uso de la Inyección de Dependencias de [...]
Renato dijo
1 de December del 2008 a las 11:51 am
Buenos dÃas hace algo de tiempo recuerdo haber leido este post algo rapido, y bueno hoy ya con más tiempo estuve viendo tu blog, sin embargo te agradecerÃa muchisimo si pudieras darme los links de tu Lyckapedia (/jcs/wiki), estaba todo muy bien explicado
y ahora ya no se puede acceder a: Inyección de Dependencias, de control y toda la información que tenias.
Te agradeceria infinitamente ese favor, espero se pueda =)
Por cierto, muy interesante y diverso tu blog
yoyoooyoy dijo
1 de December del 2008 a las 1:25 pm
Gracias Renato, todo esto lleva bastante trabajo y se agradece que a la gente le guste.
Respecto a la Lyckapedia lleva un tiempo caÃda tras sufrir un ataque de spam, y de momento sigue sin fecha de vuelta. Intentaré recuperar un backup, instalarla en un ordenador local y te pasarÃa el artÃculo vÃa mail.
Saludos y gracias.
Renato dijo
2 de December del 2008 a las 12:20 pm
Te estare muy agradecido por eso