Resumen de la conferencia de Novedades de Spring Framework 7.0
· 20 min · linux
Introducción
En esta entrada vamos a ver las novedades de Spring Framework 7.0, que trae consigo una serie de mejoras y nuevas características que facilitan el desarrollo de aplicaciones Java.
Desde donde venimos
- Spring Framework 6.2
- Spring Boot 3.5
- Jakarta 10, Hibernate 6.x, Jackson 2.x y Kotlin 1.x
- Soporte de Java 17 y 21
- **Soporte de AOT para GraalVM Native Image y CDS - Class Data Sharing **
Novedades destacadas
- Spring Framework 7.0: La última versión del framework, que incluye mejoras significativas en rendimiento, compatibilidad y nuevas características. Estará disponible en noviembre de 2025.
- Compatibilidad principal con JDK 17: Spring Framework 7.0 es compatible con Java 17.
- Compatibilidad con Jakarta EE 11: Se ha actualizado para ser compatible con Jakarta EE 11, lo que permite utilizar las últimas especificaciones de Jakarta EE.
- Uso del estándar JSpecify para nulabilidad: Se ha adoptado el estándar JSpecify para mejorar la gestión de nulabilidad en el código, lo que ayuda a evitar errores comunes relacionados con valores nulos.
- Inclusión de Kotlin 2.x: Spring Framework 7.0 incluye soporte para Kotlin 2.x, lo que permite a los desarrolladores utilizar las últimas características del lenguaje Kotlin en sus aplicaciones Spring.
- Uso de Virtual Threads en JDK 25: Se ha mejorado el soporte para Virtual Threads en JDK 25, lo que permite una mejor gestión de la concurrencia y el rendimiento en aplicaciones Spring.
- Mejoras en la integración de AOT con GraalVM y Leyden: Se han realizado mejoras significativas en la integración con GraalVM, lo que facilita la creación de aplicaciones nativas y mejora el rendimiento general.
- Nueva versión de Spring Data 4.0: Spring Framework 7.0 incluye una nueva versión de Spring Data, que ofrece mejoras en la integración con bases de datos y nuevas características para facilitar el acceso a datos.
- Algunas mejoras más: Como por ejemplo,. el registro de beans y el versionado de api
¿Porqué JDK 17?
Spring Framework 7.0 ha decidido centrarse en JDK 17 como su versión principal de compatibilidad debido a varias razones:
- LTS (Long Term Support): JDK 17 es una versión LTS, lo que significa que recibirá actualizaciones y soporte a largo plazo, lo que la convierte en una opción estable para aplicaciones empresariales.
- Mejoras del Runtime: JDK 17 incluye mejoras sobre run Runtime, rendimiento y nuevas características que benefician a las aplicaciones Spring. Como por ejemplo el garbage collector ZGC, que mejora la eficiencia en la gestión de memoria.
- Se recomientda usar JDK 21: sobre todo por el soporte de Virtual Threads, que mejora la gestión de la concurrencia y el rendimiento en aplicaciones Spring.
- AOT Class Loading y Linking (Leyden): JDK 24 introduce mejoras en la carga y vinculación de clases AOT (Ahead Of Time), lo que facilita la creación de aplicaciones nativas y mejora el rendimiento general.
Jakarta EE 11
Spring Framework 7.0 es compatible con Jakarta EE 11, lo que permite a los desarrolladores utilizar las últimas especificaciones de Jakarta EE en sus aplicaciones Spring. Esto incluye mejoras en la integración con tecnologías como JPA, CDI y otros componentes clave de Jakarta EE.
- Servlet 6.1
- JPA 3.2
- Bean Validation 3.1
- Enfoque a JDK 17
Proveedores Jakarta EE 11
- Tomcat 11
- Hibernate 7.0
- Hibernate Validator 9.0
Integración de software de terceros
- Jackson 3.0
- Netty 4.2
- Junit 6
JSpecify
Spring Framework 7.0 ha adoptado el estándar JSpecify para mejorar la gestión de nulabilidad en el código. JSpecify es un estándar que permite a los desarrolladores especificar explícitamente si un valor puede ser nulo o no, lo que ayuda a evitar errores comunes relacionados con valores nulos y mejora la legibilidad del código.
- Para declaraciones de tipo genérico, se usarán anotaciones Type-use
- Usando anotaciones como
@NullMarked
par paquetes y@Nullable
para indicar la nulabilidad de los parámetros y los valores de retorno. - NullAway sera el analizador de nulabilidad
Kotlin 2.x
Spring Framework 7.0 incluye soporte para Kotlin 2.x, lo que permite a los desarrolladores utilizar las últimas características del lenguaje Kotlin en sus aplicaciones Spring. Esto incluye mejoras en la interoperabilidad con Java y nuevas características del lenguaje que facilitan el desarrollo de aplicaciones más concisas y expresivas.
- Nuevo compilador de Kotlin K2
- Relfexión más rápida y ligera
- Integración fuerte con JSpecify para la nulabilidad
HTTP Service Registry
Spring Framework 7 ha buscado una nueva manera de realizar peticiones HTTP.
- Usando la anotación @ImportHttpService
- Y luego dentro de un bean definir un objeto RestClientHttpServiceGroupConfigurer
- Se pueden definir varias propiedades para configurar los HTTP Service Groups
HTTP API Verioning
Spring Framework 7.0 introduce una nueva forma de versionar las APIs HTTP, lo que facilita la gestión de diferentes versiones de una API dentro de la misma aplicación. Esto se puede lograr utilizando anotaciones específicas para definir las versiones de las APIs y sus rutas correspondientes.
- Del lado del servidor podemos indicar en una anotación por ejemplo
@GetMapping()
un nuevo parámetroversion
para indicar la versión de la API. - Del lado del cliente, se puede usar el método .apiVersionInserter() para indicar la versión de la API que se desea consumir.
Mejoras del Rendimiento
Spring Framework 7.0 incluye varias mejoras de rendimiento que optimizan la ejecución de aplicaciones Spring. Estas mejoras abarcan desde la gestión de memoria hasta la eficiencia en la ejecución de tareas concurrentes.
- Project Leyden: Mejora la carga (arranque de la aplicación) y el warmup time (tiempo hasta conseguir el peek performance) de las apliaciones Java Cambiando la computación antes o después en el tiempo
- Esto puede conseguirse con Análisis estático o con Observación dinámica
- Para esto sería necesario realizar un entrenamiento del JVM para que pueda optimizar la ejecución de la aplicación. Usando los parámetros JVM
-XX:AOTMode=record -XX:AOTConfiguration=app.aotconf
. - Para incluir el entrenamiento con con las JVM Options
-XX:AOTMode=create -XX:AOTConfiguration=app.aotconf -XX:AOTCache=app.aot
- Para después ejecutar la aplicación usando la opción
-XX:AOTCache=app.aot
- Se pueden realizar optimizaciones de AOT (Ahead Of Time) para mejorar el rendimiento de la aplicación: Linkado y carga de clases, métodos profile, Resolver entradas constant-pool, Compilación de código, Generar proxies dinámicos, generar datos de reflexión, Cachear resultados de class-not-found (desde JDK 24 basado en el JEP 483)
- Se muestran mejoras en el rendimiento del orden de hasta un 75% mejor que no usando Leyden
- Compatible con las aplicaciones Spring Boot a partir de la versión 3.3 y JDK 24
- Se han mejorado por ejemplo en el caso de la apliación de ejemplo de Spring Pet Clinic, el tiempo de arranque de 5.74 segundos a 2.2 segundos usando Spring AOT y AOT Cache, o incluso 1,29 segundos usando también Compilación de código AOT.
- Spring Data: JPql mejora significativamente el rendimiento de las consultas respecto al Criteria API, del orden de más de seis veces más rápido, en Spring Data JPA 3.5.
- En Spring Data JPA 4.0 con Hibernate se ha mejorado muchísimo el rendimiento de todo tipo de consultas, tanto EntityManager, @Query y Queries derivadas. Y todo sin cambiar el código de las aplicaciones.
- Se han anunciado los Repositorios AOT, que deberían facilitar la depuración de código de las consultas de los métodos de los repositorios.
- También se ha mejorado usando estos repositorios AOT el rendimiento de arranque de los propios repositorios, un 10% aproximadamente. También usan un 10% menos de memoria que los repositorios tradicionales.
- Tienen un mejor soporte de los IDE’s como IntelliJ y Eclipse, que pueden mostrar mejor las explicaciones de los métodos de los repositorios y manejar la depuración, disponible en noviembre de este año.
Spring AI
- Spring AI: Liberada la versión 1.0 de Spring AI, que permite integrar modelos de IA en aplicaciones Spring.
- Soporte de ChatCliente API, RAG, Memoria de Chat, Llamada a tools, evaluación y Observabilidad.
- Se tira por el uso de MCP (Machine Context Protocol) para la comunicación entre los diferentes componentes de Spring AI.
- MCP tiene una arquitectura de cliente y servidor, donde el servidor puede tener definidos diferentes tools, recursos y prompts. Y el cliente, puede exponer roots que serían como parte del sistema de ficheros. Referencia: https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2
- Se pueden implementar sistemas agénticos, bien en base a flujos de trabajo o bien en base a agentes dinámicos.
- Referencia de ejemplo de patrón de agentes: https://github.com/spring-projects/spring-ai-examples/tree/main/agentic-patterns
- Licencia Apache 2.0, por lo que se puede usar en proyectos comerciales.