Spring 5 a été publié à la fin de l’année 2017. Spring 5 apporte une mise à jour massive au framework Spring. Spring 4 a été publié en 2013, donc tout le monde s’attendait à une refonte majeure du framework. Je suis très heureux de voir les nouvelles fonctionnalités dans le framework Spring.
Caractéristiques de Spring 5
Les fonctionnalités de Spring 5 peuvent être largement divisées en catégories suivantes :
- Prise en charge de la version Java de base
- Améliorations de l’API principale
- Améliorations de Spring Web MVC
- Spring WebFlux
- Programmation fonctionnelle avec prise en charge de Kotlin
- Améliorations des tests
- Prise en charge des éléments obsolètes et des packages supprimés
Prise en charge de la version Java de base
- Spring 5 fonctionne sur Java 8, donc le code Spring peut tirer parti des expressions lambda pour améliorer la lisibilité du code.
- Spring 5 prend également en charge Java 9, nous permettant de créer nos applications selon une architecture basée sur des modules également.
- Spring 5 prend en charge Java EE 7 et est également compatible avec Java EE 8. Ainsi, nous pouvons utiliser Servlet 4.0, Bean Validation 2.0, JPA 2.2 dans nos applications. Nous pouvons également utiliser leurs versions antérieures, c’est-à-dire Servlet 3.1, Bean Validation 1.1, JPA 2.1.
- Les versions recommandées pour les applications Spring 5 sont Tomcat 8.5+, Jetty 9.4+ et WildFly 10+.
I really like that spring 5 is trying to catch up to the latest version of different technologies.
Améliorations de l’API principale
- Déclaration d’API non nulle au niveau du package. Les arguments, champs et valeurs de retour nullables sont explicitement annotés avec l’annotation
@Nullable
. - Les opérations de fichier sont effectuées via les flux NIO 2, c’est-à-dire sans utilisation de FileInput/Output Stream. Il s’agit d’une amélioration significative et d’un renforcement des performances pour les applications basées sur des fichiers.
- Le framework Spring 5.0 est livré avec son propre pont Commons Logging;
spring-jcl
au lieu de Commons Logging standard. - Prise en charge de la fourniture d’informations sur les composants Spring via le fichier d’index « META-INF/spring.components » plutôt que par analyse du classpath. Cela améliorera considérablement le temps de démarrage si vous avez un grand projet Spring avec de nombreux composants Spring. Il sera également plus pratique pour les développeurs, car nous pouvons directement consulter les fichiers spécifiés pour trouver le point d’entrée de l’application plutôt que de rechercher dans l’ensemble des fichiers du classpath.
Améliorations de Spring Web MVC
Le module Spring MVC a été largement révisé en termes d’utilisation des dernières technologies Java EE. Certaines des principales améliorations sont les suivantes :
- Prise en charge complète de la signature Servlet 3.1 dans les implémentations de
Filtre
fournies par Spring. - Prise en charge de l’argument
PushBuilder
de Servlet 4.0 dans les méthodes du contrôleur Spring MVC. - MaxUploadSizeExceededException pour l’analyse multipartite de Servlet 3.0 sur les serveurs courants.
- Prise en charge unifiée des types de médias courants via un délégué MediaTypeFactory.
- Association de données avec des objets immuables en utilisant Kotlin, Lombok, @ConstructorProperties.
- Prise en charge de l’API de liaison JSON en tant qu’alternative à Jackson et GSON.
- Prise en charge de Reactor 3.1 Flux et Mono ainsi que de RxJava 1.3 et 2.1 comme valeurs de retour des méthodes du contrôleur Spring MVC.
- Prise en charge de
ResponseStatusException
comme alternative programmatique à@ResponseStatus
.
Spring WebFlux
Spring WebFlux est le nouveau module, c’est une alternative au module spring-webmvc
et est construit sur un framework réactif. Ce module est utilisé pour créer des applications entièrement asynchrones et non bloquantes construites sur le modèle d’exécution à boucle d’événements.
- Infrastructure réactive dans spring-core telle que l’encodeur et le décodeur pour coder et décoder des flux d’objets.
- @Controller style, modèle de programmation basé sur des annotations, similaire à Spring MVC, mais pris en charge dans WebFlux, fonctionnant sur une pile réactive.
- Nouveau WebClient avec une API fonctionnelle et réactive pour les appels HTTP, comparable au RestTemplate mais via une API fluide et excellent également dans des scénarios non bloquants et de streaming basés sur l’infrastructure WebFlux.
Programmation fonctionnelle avec prise en charge de Kotlin
Spring 5 prend également en charge la programmation Kotlin maintenant. Il s’agit d’une avancée majeure vers la prise en charge de la programmation fonctionnelle, tout comme Java se dirige également vers la programmation fonctionnelle.
- Prise en charge de l’API Null-Safe
- Prise en charge des classes immuables Kotlin avec des paramètres facultatifs et des valeurs par défaut.
- En exploitant les paramètres de type reified de Kotlin pour éviter de spécifier explicitement la classe à utiliser pour la sérialisation/désérialisation dans diverses API comme RestTemplate ou les API WebFlux.
- Prise en charge de Kotlin autowired constructeur avec des paramètres optionnels.
- Prise en charge de la sécurité des nullités Kotlin pour @Autowired/@Inject et @RequestParam/@RequestHeader/etc annotations.
Améliorations des tests
- Prise en charge de JUnit 5
- Prise en charge de l’exécution de tests parallèles dans le cadre Spring TestContext
Support obsolète et suppression de packages
- Suppression des packages
beans.factory.access
,jdbc.support.nativejdbc
,mock.staticmock
du modulespring-aspects
. - Suppression des packages
web.view.tiles2
etorm.hibernate3/hibernate4
. Cela signifie que si vous prévoyez d’utiliser Spring 5, vous devrez également utiliser Hibernate 5. - Abandon du support des anciennes technologies Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava. Si vous utilisez l’une de ces technologies, migrez vers d’autres technologies ou restez avec Spring 4.
C’est tout pour un aperçu rapide des fonctionnalités de Spring 5. Référence : Spring GitHub Doc
Source:
https://www.digitalocean.com/community/tutorials/spring-5