sábado, 4 de febrero de 2017

¿Qué es Spring?

Pretendo dar un brochazo de las definiciones principales alrededor de Spring, sin entrar al detalle, si desean profundizar pueden encontrar información al respecto en el sitio oficial http://spring.io/. Más adelante haremos ejemplos prácticos más completos para aclarar.


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)


Definiciones principales de Spring
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.

Spring Boot: es un sub-proyecto de Spring, busca facilitar la configuración eliminando el uso de XML por aplicaciones totalmente en java, y permite generar despliegues JAR autónomos que no necesitan de un contenedor de aplicaciones ya que tienen embebido un Tomcat o un Jetty.


Con ésta entrada se tiene la introducción al uso de Spring Framework.