Componentes del framework
Introducción
En primer lugar, este capítulo presenta Spring en su contexto histórico y, seguidamente, describe sus partes constitutivas y elementos de configuración.
Aspectos históricos
El framework Spring se diseñó para facilitar la creación de aplicaciones empresariales en un contenedor web ligero como Tomcat, es decir, sin administración de EJB.
En las siguientes tablas se proporciona una ubicación temporal.
Evolución de Java Enterprise
Año |
Versión |
Contenido |
1999 |
J2EE 1.2 |
Servets, JSP, EJB (1.1), JMS, RMI |
2001 |
J2EE 1.3 |
EJB (2.0 CMP), JCA |
2003 |
J2EE 1.4 |
EJB (2.1 MDB), Web services, JAX-RPC, Deployment Specification |
2006 |
Java EE 5 |
EJB (3.0 annotations), JPA, Annotations, JSF, JAX-WS |
2009 |
Java EE 6 |
Profil web, Servlet 3.0, EJB (3.1 singletons, lite, asynchronous), CDI, JAX-RS |
2013 |
Java EE 7 |
JMS 2.0, JAX-RS 2.0, Servlet 3.1, API JSON, WebSockets |
2017 |
Java EE 8 |
CDI 2.0, JSON-B 1.0, Servlet 4.0, JAX-RS 2.1, JSF 2.3, JSON-P 1.1, Bean Validation 2.0, JPA 2.2, WebSocket 1.6 |
Poco después del lanzamiento de Java, aparecieron los principios de diseño basados en JavaBeans que, por ejemplo, se utilizarían posteriormente en librerías gráficas de Java, como AWT. Sin embargo, no existía nada que permitiera usarlo en el lado del servidor de aplicaciones. Se hace un intento con EJB 1, pero nos alejamos mucho de los aspectos principales, y la evolución hacia EJB 2 complicaría aún más las cosas.
En ese momento, las JVM eran de pequeño tamaño, lo que hacía necesario que se multiplicaran y se comunicaran entre sí para obtener una JVM más grande (compuesta por nodos). Una JVM utiliza prácticamente toda la RAM de una máquina. Se agrupaban las máquinas en clústeres especializados y organizando nodos, lo que en última instancia permitía disponer de más espacio de memoria y capacidad de cálculo (CPU). Es habitual que haya un nodo maestro supervisando varios nodos secundarios.
En 2002, la situación era muy especial. No se podía ser arquitecto de Java si no se codificaba con EJB 2.0, que era una puesta al día de EJB 1.1. Sin embargo, esta tecnología no estaba madura y muy pocos proyectos terminaron en producción. La complejidad de la aplicación era extrema. Las cosas funcionaron a pequeña escala...
Utilidad de Spring en un proyecto
El framework Spring es una solución ligera, basada en componentes de software independientes. Proporciona soluciones técnicas unificadas para la mayoría de las dificultades estándares que aparecen en los proyectos. Ofrece implementaciones para un conjunto de design patterns (patrones de diseño), como veremos en un capítulo dedicado a este tema. Las librerías de extensión también proporcionan facilidades para el uso de las librerías de software más utilizadas. Construir servicios web SOAP, servicios REST para acceder a los datos y hacer una aplicación basada en una sucesión de pantallas (wizard) se convierte en algo sencillo de hacer. Las diferencias entre las implementaciones de frameworks estándares de acceso a datos se suavizan con el uso de una API unificada.
Los proyectos se centran en la parte de negocio, mientras que la parte técnica la administra el framework Spring, que originariamente fue diseñado para Java, pero hoy en día existe para otras plataformas como .NET.
Spring tiene licencia en Apache 2.0 y es open source. Se puede acceder a las fuentes y hacer peticiones de evoluciones desde la URL https://github.com/spring-projects. Incluso es posible proponer correcciones de errores o cambios a través de «change requests» (peticiones de cambio).
El conjunto se maveniza (con las fuentes y el javadoc) en el repository central Maven para la versión estándar y en los repositories Maven SpringSource para las versiones en desarrollo. Encontraremos la ubicación de los repositorios al final del capítulo. Es posible usar Maven o Gradle para hacer proyectos de Spring. En este libro, utilizamos principalmente versiones Maven. El framework Spring es una solución full stack, es decir, que incluye todos los componentes técnicos y permite realizar aplicaciones completas, llave en mano. El núcleo de Spring tiene muy pocas dependencias externas. Al ser modular, permite incorporar solo los elementos necesarios...
Visión general y temas tratados en el libro
1. Los módulos Spring
Hasta la fecha, la documentación de Spring lista unos veinte módulos Spring agrupados por temas. Para los ejemplos de este libro, se utilizan las versiones 4.3 y 5.3.
El núcleo central en las versiones 4.3.30 y 5.3.18
Nombre del módulo |
Utilidad |
spring-core |
Los fundamentos: gestión de objetos y proxy. |
spring-beans |
La configuración y las factories de beans. |
spring-context |
Gestión del contexto, EJB, JMX, JNDI, scheduling, validation. |
spring-context-support |
Support ehcache, guava, mail, scheduling UI. |
spring-expression |
Expresssion language Spring: SpEL. |
La POA
Nombre del módulo |
Utilidad |
spring-aop |
POA a través de proxys. |
spring-aspects |
Aspectos basados en AspectJ. |
spring-instrument |
Agente de instrumentación para el bootstrapping de la JVM. |
spring-instrument-tomcat |
Agente de instrumentación para Tomcat. |
Mensajes
Nombre del módulo |
Utilidad |
spring-messaging |
Tener aplicaciones basadas en mensajes. |
Acceso a los datos
Nombre del módulo |
Utilidad |
spring-jdbc |
Facilidades JDBC. |
spring-tx |
Gestión programática de transacciones. |
spring-orm |
Mapping Hibernate (JPA y JDO). |
spring-oxm |
Mapping Object/XML como JAXB, Castor, XMLBeans, JiBX y XStream. |
spring-jms |
Módulo Java Messaging Service e integración spring-messaging desde Spring Framework 4.1. |
Web
Nombre del módulo |
Utilidad |
spring-web |
Componentes web. |
spring-webmvc |
Web services REST y web MVC. |
spring-websocket |
Web sockets. |
spring-webmvc-portlet |
Web en un contexto portlet. |
Prueba
Nombre del módulo |
Utilidad |
spring-test |
Ayuda para utilizar JUnit y TestNG con Spring y objetos mock. |
2. Temas tratados
Como vimos en el prólogo, Spring es muy extenso. No podemos cubrir todo en un libro, aunque vamos a tratar los temas más utilizados, a saber, la parte back de las aplicaciones web y, a menudo, móviles, así como la parte front, para la que nos vamos a limitar a las aplicaciones web, ya que incluiremos los servicios web en esta parte. Describiremos tanto como sea posible las pruebas unitarias asociadas. Los ejemplos están tomados de casos reales presentes en los proyectos que se pueden descargar. También se detalla la programación por aspectos, que se utiliza ampliamente con Spring.
Los ejemplos utilizan la última versión «release» de Spring, disponible...
Complementos
Los curiosos pueden descargar una de las primeras versiones de Spring en la versión 0.9, en la dirección https://sourceforge.net/projects/springframework/files/springframework/0.9/spring-framework-0.9.zip/download, del 26 de junio de 2003, con JDK 1.4 (JDK 1.5). Esta versión es compatible con JDK 1.4 parcheando este JDK para tener las anotaciones antes de la fase.
También está disponible la versión 1.0 y se compila con modificaciones menores.
En estas versiones encontramos la esencia misma de Spring.
Puntos clave
-
El framework Spring es modular.
-
Usamos Maven para configurarlo.
-
Las aplicaciones web y las pruebas son los dos puntos fuertes de Spring.