Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Java Spring
  3. Nouveautés de Spring 6
Extrait - Java Spring Le socle technique des applications Jakarta EE (4e édition)
Extraits du livre
Java Spring Le socle technique des applications Jakarta EE (4e édition) Revenir à la page d'achat du livre

Nouveautés de Spring 6

Le futur de Spring

Spring va changer de version majeure en fin d’année. Nous aurons Spring 6 et Spring Boot 3.

Cette version demande le JDK 17 et fonctionne avec Jakarta EE 9.

Les principales nouveautés que nous allons détailler sont la compilation native Spring Native, la prise en charge des modules Java et l’observabilité. Il y aura un gros ménage dans les fonctionnalités obsolètes. Afin de faciliter la transition, le JDK 17 et Jakarka EE 9+ seront supportés avec Spring 5.3.x.

La dernière version actuellement disponible est la 6.0.0-M3 du 17/03/22.spring-framework-6.0.x-stage-milestone-3.1. Le récapitulatif des évolutions à faire dans le code pour la migration vers la version 6 est indiqué sur cette page : https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x.

Prise en charge des modules Java

Nous pourrons utiliser JPMS (Java Platform Module System). Nous aurons des descripteurs de module pour tous les modules Spring. Les modules existent depuis le JDK 9. Il s’agit d’un nouveau niveau d’abstraction au-dessus des packages. Théoriquement, nous avons une nouvelle abstraction package of Java Packages qui permet de rendre le code encore plus réutilisable.

L’adoption des modules a été différée principalement à cause des packages Maven et de Spring. Les évolutions ont été apportées à Maven (et Gradle), Spring devait donc s’inscrire dans le mouvement. Cela sera chose faite.

En effet, par défaut, nous ne pouvons pas utiliser la réflexion sur les classes que nous importons d’un autre module, bien que Spring et JUnit utilisent la réflexion massivement.

Avec la modularisation, nous avons à la fois une dépendance à l’exécution et à la compilation. Or Spring nous abstrait des dépendances à la compilation avec le système de discovery et d’auto-configuration, ce qui est une tout autre approche.

Les modules permettent de masquer des choses, de cultiver le secret, tandis que Spring est là pour exposer et réutiliser. Java évolue également souvent sans tenir compte des personnes, des outils, de qui les utilisent...

Spring Native

Depuis quelque temps, les entreprises migrent vers le cloud. Les clouds récents reposent sur Docker et Kubernetes. Ce qui coûte cher dans ces architectures ce sont l’empreinte mémoire et le temps de lancement des nœuds. Des solutions ont commencé à émerger dans cet écosystème basé sur GraalVM. GraalVM parvient en effet à concurrencer les serveurs Node.js, notamment au niveau des serveurs de fonctions qui scalent à 0.

Spring a dès le départ collaboré avec Sun puis avec Oracle sur l’utilisation de GraalVM et propose aujourd’hui son intégration. On retrouve alors les avantages de Quarkus ou Micronaut mais dans l’écosystème Spring. La solution est d’ores et déjà disponible avec Spring Boot 2 mais tous les modules ne sont pas pris en charge pour le moment.

Project Leyden

Nous aurons peut-être l’incorporation du projet Leyden (The java static graph project). Mark Reinhold, architecte du langage Java, a proposé d’améliorer des applications binaires statiques afin d’obtenir un démarrage plus rapide et une mémoire inférieure. Cela permettra de compiler du code Java (just-in-time) et d’obtenir des applications natives (ahead-of-time) offrant des capacités similaires au mode natif de GraalVM. Il s’agit de la compilation AOT statique.

Spring Observability

Ce module se base sur Micrometer pour les métriques et sera disponible pour les applications natives.

Obsolescence programmée

Certaines fonctionnalités ne seront peut-être plus supportées :

  • Autowiring sur les setters par nom/type.

  • Simplification du FactoryBean.

  • Support des EJB, JCA et de JAX-WS.

  • Configuration des applications Spring via la configuration XML.

  • Possibilité de faire des appels RPC.