En este post voy a intentar demostrar la sencillez de dos conceptos muy importantes en Spring:
- Inversion of Control (IoC) = Inversión del Control.
- Dependecy Injection(DI) = Inyección de Dependencias.
Inversion of Control & Dependency Injection
“Es el proceso mediante el cual los objetos definen sus dependencias, bien mediante argumentos en el constructor, argumentos en un método factoría o propiedades que se asignan una vez el objeto está creado.”
La definición de estas dependencias se puede hacer con xml, anotaciones o mediante código java.
Entonces aparece en escena nuestro amigo el contenedor:
Es el contenedor quien inyecta las dependencias al crear el bean.
Este proceso es el inverso a la creación de instancias o asignación de dependencias, tanto usando la creación directa de las mismas o un mecanismo como Service Locator Pattern.
Por resumirlo mucho: Es el contenedor quien hace el trabajo de crear instancias en lugar de las clases, de ahí el nombre Inversion of Control.(Inversión del control)
No mas “a = new A(….);” este trabajo sucio se lo dejamos al contenedor (IoC container).
Bean: Un bean es un objeto que es instanciado, ensamblado o gestionado por un IoC Container.
Una de las ventajas de usar un contenedor (IoC Container), es que la gestión de dependencias ya no se hace dentro de las clases. Cada clase o Bean es autocontenida, sólo tiene que preocuparse de su alcance, será el contenedor quien le proporcione las instancias de clases que necesita.
Ejemplo
Este sencillo ejemplo muestra:
- La configuración minima para ejecutar un Spring Container
- Cómo funciona la IoC o DI a un nivel muy básico
Configuración mínima
pom.xml en el cual vamos a declarar los paquetes de Spring que necesitamos
Sólo con spring-context ya nos basta.
Por dependencias transitivas, nos descargará también los paquetes del “core container”
Configuraciones
application-context.xml