Spring 4: Nuevas características.
1) Mejorada experiencia de comienzo de usuario
Existe una guía cuidada de tipología "Getting Started".
Además, el nuevo sitio web proporciona un vistazo general comprensivo acerca de todos los proyectos que se encuentran bajo el paraguas de Spring.
También existen materiales sobre ficheros POM de Maven acerca de las nuevas versiones que van publicándose de Spring.
2) Mejora de calidad de código.
Se han eliminado los métodos y paquetes depreciados: esto mejora la ligereza de los jar's necesarios, pero también se debe tener cuidado en el caso de que, si se intenta adaptar una versión antigua de Spring a una nueva, es necesario que el código no invoque (que podría) a métodos obsoletos.
3) Soporte a muchas de las características de Java 8.
Se puede hacer uso de expresiones lambda y referencias a métodos dentro de las interfaces callbak de Spring.
Hay soporte para java.time (JSR-310) y muchas anotaciones, como "Repeatable".
También se puede usar el nombre de parámetro de Java 8 como una alternativa para compilar el código con información de debug habilitada.
Aunque Spring mantiene la compatibilidad con versiones anteriores de Java, en concreto Java SE 6 (actualización 18, sacada en Enero de 2010), se recomienda que para nuevos proyectos basados en Spring 4 se haga uso de Java 7 o bien Java 8.
4) Java EE 6 and 7
La versión J2EE 6 o posterior se considera como la línea base de Spring Framework 4, que soporta las especificaciones JPA 2 y Servlet 3.
Para mantener la compatibilidad con Google App Engine y servidores de aplicación antiguos, es posible desplegar una aplicación de Spring 4 dentro de un entorno de Servlet 2.5. Sin embargo, se recomienda el uso de Servlet 3.0 en adelante, además de ser un prerrequisito para las pruebas y los paquetes mock en entornos de desarrollo.
Spring 4 soporta el nivel de Java EE7, particularmente: JMS 2, JTA 1.2, JPA 2.1, Bean Validation 1.1, y utilidades de concurrencia.
Hay que notar que Hibernate 4.3 es un proveedor de JPA y consecuentemente sólo es soportado por Spring Framework 4. Esto mismo aplica para el validador de Hibernate 5.0, que es un proveedor de Bean Validation 1.1. Ninguno de ellos es soportado por Spring Framework 3.2.
5) Definiciones de Bean Groovy DSL
Empezando con el framework de Spring 4, es posible definir configuración externa de bean usando Groovy DSL. Esto es un concepto similar al usar definiciones de bean XML, pero permite una sintaxis más concisa. Groovy permite además incrustar definiciones embebidadas de manera sencilla en el código "bootstrap". Por ejemplo:
def reader = new GroovyBeanDefinitionReader(myApplicationContext) reader.beans { dataSource(BasicDataSource) { driverClassName = "org.hsqldb.jdbcDriver" url = "jdbc:hsqldb:mem:grailsDB" username = "sa" password = "" settings = [mynew:"setting"] } sessionFactory(SessionFactory) { dataSource = dataSource } myService(MyService) { nestedBean = { AnotherBean bean -> dataSource = dataSource } } }
6) Mejoras dentro del contenedor central
Spring trata los tipos genéricos como una forma de cualificador cuando se inyectan beans. Por ejemplo, cuando usas un repositorio de datos spring puedes fácilmente injectar una implementación específica de la siguiente manera: @Autowired Repository<Customer> customerRepository
.
Si utilizadas soporte a las meta-anotaciones de Spring, puedes desarrollar anotaciones específicas que expongan atributos específicos desde la anotación de código.
Los beans pueden ser ordenados cuando se autoinyectan dentro de listas y arrays, para ello existe la anotacion @Order, así como la interfaz Ordered.
La anotación @Lazy puede ser usada para puntos de inyección, de la misma manera que las definiciones de @Beans.
La anotación de @Description se ha introducido para los desarrollador que hacen uso de configuración basada en Java.
Un modelo generalizado de los beans filtrados por condiciones ha sido añadido a través de la anotación @Conditional. Esto es similar al soporte de @Profile, pero permite al usuario definir estrategias para desarrollar de manera programática.
Las clases proxy basadas en CGLIB no necesitan más un constructor por defecto. El soporte se proporciona a través de la librería objenesis, la cual ha sido repaquetada y distribuida como parte del framework Spring. Con esta estrategia, no es necesario invocar instancias de proxy.
Hay un soporte administrado de time zones a través del framework, por ejemplo, LocaleContext.
7) Mejoras generales sobre web
8) WebSocket, SockJS, and STOMP Messaging
Un nuevo módulo de spring - websocket proporciona soporte comprensivo para el webscoket basado en doble comunicación entre cliente y servidor. Es compatible con JSR-356, la API de Java WebSocket, y además proporciona opciones SockJS (por ejemplo, emulación de WebSocket), para ser usado en navegadores que no tienen todavía el soporte del protocolo de WebSocket (por ejemplo, Internet explorer < 10).
Un nuevo módulo de mensajería spring añade soporte para STOMP como el subprotocolo de WebSocket para usar en aplicaciones a través de un modelo de programa de anotaciones para enrutar y procesar mensajería STOMP desde los clientes de WebSocket. Como resultado, un @Controller puede entonces contener métodos tanto de @RequestMaping como @MessageMapping para manejar peticiones HTTP y mensajería desde clientes conectados de WebSocket. El módulo de mensajería de spring además contiene abstracciones de llabes, formalmente, desde el proyecto de Spring Integration con Message, MessageChannel, MassgaHandlet y otros, para servir como una fundación de aplicaciones basadas en mensajería.
Para más detalles, se puede ver el capítulo 21, relativo a soporte a WebSockets.
- Todas las anotaciones dentro del módulo de spring-test (por ejemplo, @ContextConfiguration, @WebAppConfiguration, @ContextHierarchy, @ActiveProfiels, etc), pueden ser usados ahora como meta-anotaciones para crear anotaciones compuesta y reducir la diplicación de configuración dentro de una onjunto de tests.
- La definición de perfiles de beans activos pueden ser resueltos de manera programática, simplemente implementando un ActiveProfileResolver personalizado y registrándolo a través del atributo de @ActiveProfiles.
- Una nueva clase llamada SocketUtils puede ser introducida dentro del módulo principal de spring-core, y permite escanera los puertos TCP y UDP dentro de localhost. Esta funcionalidad es no específica para testear, pero puede ser muy útil cuando se escriben test de integración que requieren el uso de sockets, por ejemplo, test que empiezan dentro de
- A new
SocketUtils
class has been introduced in thespring-core
module which enables you to scan for free TCP and UDP server ports on localhost. This functionality is not specific to testing but can prove very useful when writing integration tests that require the use of sockets, for example tests that start an in-memory SMTP server, FTP server, Servlet container, etc. - As of Spring 4.0, the set of mocks in the
org.springframework.mock.web
package is now based on the Servlet 3.0 API. Furthermore, several of the Servlet API mocks (e.g.,MockHttpServletRequest
,MockServletContext
, etc.) have been updated with minor enhancements and improved configurability.
Reader Comments (2)
Este framework es una pasada. Yo como parte de mis "proyectos Java" lo tengo definido como un standard de facto. Muy pero muy raras veces me he encontrado problemas a los que este ecosistema de Springsource no tenga ya un proyecto como solución. No pierdo mi tiempo en discutir con sus detractores ni en declararlo mejor o peor que algún otro framework de otra plataforma (DJango, Symphony etc), para mi es una herramienta valiosísima y los resultados que me ofrece en mis soluciones me avalan mi opinión, con eso me quedo.
Muchas gracias por tu opinión, evdelacruz.