Spring es un framework de código abierto para el
desarrollo de aplicaciones para la plataforma Java.
Características Principales
Inversión de Control
Es un método de programación en el que el flujo de ejecución de un
programa se invierte respecto a los métodos de programación tradicionales. En
lugar de hacer llamadas a funciones, se especifican respuestas deseadas a
sucesos o solicitudes de datos concretas. El flujo habitual se da cuando es el
código del usuario quien invoca a un procedimiento de una biblioteca. La
inversión de control sucede cuando es la biblioteca la que invoca el código del
usuario.
Inyección de dependencias
Es un
patrón que tiene como finalidad conseguir un código más desacoplado. Los
componentes declaran sus dependencias, pero no se encargan de conseguirlas, sino
que el Contenedor de Spring en nuestras aplicaciones será el encargado de
conseguir e inyectar las dependencias a los objetos. Cada parte del software es
independiente comunicándose únicamente a través de una interface.
Un ejemplo sencillo:
La clase GenerarTiquetes usa la lógica de impresión del tiquete con la clase ImpresoraAereolinea.
Clase SIN inyección
de dependencias: La clase GenerarTiquetes debe generar una
instancia de impresoraAereolinea para hacer usa lógica necesaria.
public class GenerarTiquetes { private ImpresoraAereolinea impresoraAereolinea; public GenerarTiquetes(){ this.impresoraAereolinea; = new ImpresoraAereolinea(); } //Resto de métodos de la clase }
Clase CON inyección de dependencias:
Inyección por constructor: Se declara la dependencia en el constructor.
public class GenerarTiquetes { private ImpresoraAereolinea impresoraAereolinea; public GenerarTiquetes(ImpresoraAereolinea impresoraAereolinea){ this.impresoraAereolinea; = impresoraAereolinea; } //Resto de métodos de la clase }
Con éste método se debe informar a Spring la clase a inyectar en el XML de configuración:
<!-- Crear el bean que luego se inyectará --> <bean id="impresoraAereolinea" class="paquete.ImpresoraAereolinea"> <!-- Crear el bean e inyectar el impresoraAereolinea creado arriba --> <bean id="generarTiquetes" class="paquete.GenerarTiquetes"> <constructor-arg type="paquete.ImpresoraAereolinea" ref="impresoraAereolinea"> </constructor-arg></bean> </bean>Inyección por Setter: (El más usado) Permite inyectar mediante los métodos SET. Se pueden usar anotaciones o el XML. El siguiente es un ejemplo con anotaciones.
public class GenerarTiquetes { @Autowired private ImpresoraAereolinea impresoraAereolinea; public setImpresoraAereolinea(ImpresoraAereolinea impresoraAereolinea){ this.impresoraAereolinea = impresoraAereolinea; } //Resto de métodos de la clase }Con la anotación @Autowired Spring se tiene que encargar de buscar un bean que cumpla los requisitos para ser inyectado, en este caso el único requisito es que sea del tipo ImpresoraAereolinea. (Se profundizará más adelante)
Es de aclarar las definiciones dentro del proyecto de Spring para tener claros los conceptos relacionados:
Spring: El framework de desarrollo.
Spring MVC: Módulo del framework para implementar el
patrón de arquitectura de software Modelo Vista Controlador.
Con ésta entrada se tiene la introducción al uso de Spring Framework.