Éléments constitutifs du framework
Introduction
Ce chapitre aborde d’abord Spring en le situant dans son contexte historique, puis se consacre à la description de ses différents composants et à divers aspects de sa configuration.
Historique
Le framework Spring a historiquement été développé pour simplifier la création d’applications d’entreprise dans des conteneurs web légers tels que Tomcat, en éliminant le besoin de gérer des EJB (Enterprise JavaBeans).
Le tableau suivant montre l’évolution de Java EE, maintenant connu sous le nom de Jakarta EE, à travers les années, mettant en évidence les ajouts et changements clés dans chaque version majeure.
Année |
Version |
Contenu |
1999 |
J2EE 1.2 |
Servlets, 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.1 |
2019 |
Jakarta EE 8 |
Rebranding de Java EE 8 sous l’égide de la Fondation Eclipse, compatibilité avec Java EE 8 |
2020 |
Jakarta EE 9 |
Changement de l’espace de noms javax.* en jakarta.*, nettoyage des spécifications obsolètes |
2021 |
Jakarta EE 9.1 |
Support du JDK 11, améliorations mineures par rapport à Jakarta EE 9 |
Historiquement, peu après l’apparition de Java, les JavaBeans émergent, principalement utilisés dans des bibliothèques graphiques comme AWT. Cependant, il n’y avait pas d’équivalent côté serveur jusqu’à l’introduction des EJB 1, qui s’écartaient considérablement des principes de base des purs JavaBeans. Les EJB 2 compliquèrent davantage la situation.
Durant cette période, les JVM (Java Virtual Machines) étaient de petite taille, nécessitant leur multiplication et leur interconnexion pour créer une JVM composite plus grande. Ces JVM occupaient presque toute la mémoire vive des machines, qui étaient regroupées en clusters. Dans ces clusters, un nœud maître supervisait plusieurs nœuds secondaires pour augmenter la mémoire composite et la capacité de calcul.
J2EE est un acronyme pour Java 2 Platform, Enterprise Edition. C’est...
Utilité de Spring dans un projet
Le framework Spring est une solution logicielle légère et modulaire, offrant des réponses techniques unifiées aux défis courants des projets. Il fournit des implémentations pour divers design patterns et intègre des librairies d’extension facilitant l’utilisation des bibliothèques logicielles populaires. Spring simplifie la création de web services SOAP, de services REST, et l’accès aux données, en unifiant les différences entre les frameworks standards d’accès aux données grâce à une API unifiée.
Avec Spring, les projets peuvent se concentrer davantage sur les aspects métier, laissant la gestion technique au framework. Sous licence Apache 2.0 et open source, Spring permet aux utilisateurs d’accéder aux sources, de soumettre des demandes d’évolution ou de proposer des corrections via https://github.com/spring-projects. Spring est disponible sur le repository Maven central pour les versions standard et sur les repositories Maven SpringSource pour les versions en développement. Bien que Spring soit compatible avec Maven et Gradle, ce livre se concentre principalement sur Maven.
En tant que solution full stack, Spring inclut toutes les briques techniques nécessaires pour des applications complètes, avec peu de dépendances externes....
Vue d’ensemble et sujets abordés dans l’ouvrage
1. Modules Spring
La documentation Spring liste à ce jour une vingtaine de modules Spring regroupés par thèmes. La version 6 est utilisée pour les exemples de cet ouvrage.
Le noyau central en version 6
Nom du module |
Utilité |
spring-core |
Les fondamentaux : gestion des objets et des proxies |
spring-beans |
Le paramétrage et les fabriques de beans |
spring-context |
Gestion du contexte, EJB, JMX, JNDI, scheduling, validation |
spring-context-support |
Support pour ehcache, guava, e-mail, scheduling UI |
spring-context-indexer |
Permet d’améliorer les performances au démarrage de l’application |
spring-expression |
Expression language Spring : SpEL |
Spring-binding |
Gestion du binding |
AOP (Aspect-Oriented Programming)
Nom du module |
Utilité |
spring-aop |
AOP via les proxies |
spring-aspects |
Aspects basés sur AspectJ |
spring-instrument |
Agent d’instrumentation pour la JVM |
spring-instrument-tomcat |
Agent d’instrumentation pour Tomcat |
Securité (org.springframework.security)
Nom du module |
Utilité |
spring-security-core |
Gestion de la sécurité |
spring-security-config |
Partie configuration de la gestion de la sécurité |
spring-security-web |
Sécurité pour la partie web |
spring-security-crypto |
Offre un support pour le chiffrement symétrique, la génération de clés et le codage des mots de passe |
spring-security-ldap |
Sécurité pour LDAP |
spring-security-cas |
Permet d’intégrer le système de connexion unique CAS (Central Authentication Service) |
spring-security-rsa |
Bibliothèque utilitaire pour les chiffrements RSA |
spring-security-taglibs |
Aide à intégrer la sécurité de manière déclarative dans les vues JSP |
spring-security-acl |
Pour gérer les listes de contrôle d’accès (ACL, pour Access Control List) |
Il y a, pour pratiquement tous les modules, un module complémentaire pour tester des composants qui utilisent les modules.
Il existe des extensions pour Saml, Kerberos.
Sécurité OAuth/OAuth 2
Nom du module |
Utilité |
spring-security-oauth2 |
Pour la sécurité OAuth2 |
spring-security-oauth |
Pour la sécurité OAuth1 |
spring-security-oauth-parent |
Projet parent pour le support OAuth |
spring-security-oauth2-client |
Pour... |
Compléments
Les curieux peuvent télécharger une des premières versions de Spring en version 0.9 ici : https://sourceforge.net/projects/springframework/files/springframework/0.9/spring-framework-0.9.zip/download. Elle date du 26/06/2003 et utilise le JDK 1.5.
La version 1.0 est aussi disponible et compile moyennant des modifications mineures.
Nous retrouvons dans ces versions l’essence même de Spring.
Un exercice intéressant consiste à patcher et rebuilder cette version 0.9 avec le JDK 17 et/ou le JDK 21.
Points clés
Points à retenir :
-
Le framework Spring est modulaire.
-
Spring 6 et Spring-boot 3 demandent de passer au minimum au JDK 17.
-
Spring est une alternative à l’utilisation des EJB.
-
Spring a plus de vingt ans.
-
Spring est le framework leader pour le développement d’applications d’entreprise.
-
Les sources de Spring sont disponibles.
-
Spring permet de faire des batchs.