Inversión de Control (IoC) & Inyección de Dependencia (DI)

<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>

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.

Inversión de Control (IoC) & Inyección de Dependencia (DI)

Inversión de Control (Inversion of Control, IoC)

<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>

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 cierto modo es una implementación del Principio de Hollywood (no nos llames a nosotros; nosotros te llamaremos a tí.), una metodología de diseño de software.

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).

¿Quién determina cómo deben inyectarse las dependencias?: El framework de Inversión de Control según los ficheros xml de configuración.

Beneficios

  • Elimina la responsabilidad de buscar o crear los objetos dependientes y la traslada a la configuración

  • Reduce el acoplamiento entre objetos

  • Fomenta el diseño basado en interfaces

  • Permite reconfigurar una aplicación sin modificar el código.

Se puede interpretar como que el Contenedor es un robot. Contiene piezas, engranajes, un Sistema Operativo, memoria, microprocesador… El contenedor esta esperando que le indiquemos que debe realizar para hacerlo, necesita que le programemos unas rutinas para trabajar. Esas rutinas configuradas mediante documentos xml, *.properties, permiten al robot saber que es lo que tiene que hacer. Pero es Inteligente, no le tienes que programar todo de arriba abajo, solo unas partes.

Inversión de Control (Inversion of Control, IoC)

Fundamentos de Programacion de SpringFramework

1.- Referencia en el tiempo

14/01/2002 (Martin Fowler) Inversion of Control Containers and the Dependency Injection pattern http://martinfowler.com/articles/injection.html

Se inventa el patrón ‘Inyección de Dependencias’ y la describe como una parte del ‘Patrón de Diseño’: ‘Inversión de Control’.

Octubre 2002 (Rod Johnson) “Expert One-on-One J2EE Design and Development“.

Especifica en el libro una nueva manera de programar en J2EE. El código de ejemplo sirve como base para SpringFramework.

Junio 2003 SpringFramework bajo licencia Apache 2,0. 2

2.- Patrones de Diseño

3.- IoC & DI

4.- AOP

5.- Contenedores

6.- Framework

7- Componente vs Servicio

8.- Componente vs Aspecto

Fundamentos de Programacion de SpringFramework