Éléments constitutifs du framework
Introduction
Ce chapitre présente, dans un premier temps, Spring dans son contexte historique et décrit, dans un second temps, ses constituants ainsi que des éléments de configuration.
Historique
Historiquement le framework Spring a été conçu pour faciliter la création d’application d’entreprise dans un conteneur web léger comme Tomcat, c’est-à-dire sans gestion d’EJB.
Les tableaux suivants apportent un repérage temporel.
Évolution de Java Entreprise
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.6 |
Assez rapidement après la sortie de Java, apparaissent les principes de conception basés sur les JavaBeans qui seront utilisés par exemple dans les bibliothèques graphiques Java comme AWT. Cependant, rien n’existe pour s’en servir côté serveur d’applications. Une tentative est faite avec les EJB 1, mais on s’éloigne énormément des principes, l’évolution vers les EJB 2 complique encore les choses.
À cette époque les JVM sont de taille réduite, nécessitant de les multiplier et les faire communiquer entre elles pour disposer d’une JVM composite (composées de nœuds) plus grande. Une JVM utilise alors pratiquement toute la mémoire vive d’une machine. Nous regroupons les machines par cluster en spécialisant et organisant les nœuds, ce qui permet d’avoir au final un plus grand espace mémoire et plus de capacité de calculs (CPU). Il y a alors souvent un nœud maître qui supervise plusieurs nœuds secondaires.
En 2002, la situation était très spéciale. Vous n’étiez pas Architecte Java si vous ne codiez pas avec des EJB 2.0 qui étaient un rattrapage des EJB 1.1. Or cette technologie n’était pas mature et très peu de projets finissaient en production. La complexité de mise en œuvre était extrême. Les choses fonctionnaient à...
Utilité de Spring dans un projet
Le framework Spring est une solution légère basée sur des briques logicielles indépendantes. Il apporte des solutions techniques unifiées pour la plupart des difficultés standards rencontrées sur les projets. Il offre des implémentations pour un ensemble de design patterns (patrons de conception) comme nous le verrons dans un chapitre dédié à ce sujet. Les librairies d’extension apportent également des facilités pour l’utilisation des bibliothèques logicielles les plus utilisées. Il devient alors très facile de faire des web services SOAP, des services REST d’accéder aux données, de faire une application basée sur des enchaînements d’écrans. Les différences entre les implémentations des frameworks standards d’accès aux données sont lissées avec l’utilisation d’une API unifiée.
Les projets sont alors focalisés sur la partie métier, la partie technique étant gérée par le framework Spring. Ce dernier a été conçu à l’origine pour Java mais il existe aujourd’hui pour d’autres plates-formes comme .NET.
Spring est sous licence Apache 2.0. Il est en open source. Les sources sont accessibles et des demandes d’évolutions sont possibles depuis l’URL https://github.com/spring-projects. Il est même possible de proposer des corrections de bugs ou de proposer des évolutions à travers les « change requests » (demandes de changements).
L’ensemble est mavenisé (avec les sources et la javadoc) sur le repository central Maven pour la version standard et sur les repositories Maven SpringSource pour les versions en cours de développement. Nous retrouverons l’emplacement des repositories en fin de chapitre. Il est possible d’utiliser Maven ou Gradle pour faire des projets Spring. Dans cet ouvrage, nous n’utilisons principalement que des versions Maven. Le framework Spring est une solution full stack, c’est-à-dire qu’il inclut toutes les briques techniques, et permet de faire des applications complètes, clé...
Vue d’ensemble et sujets abordés dans l’ouvrage
1. Les modules Spring
La documentation Spring liste à ce jour une vingtaine de modules Spring regroupés par thèmes. Les versions 4.3 et 5.3 sont utilisées pour les exemples de cet ouvrage.
Le noyau central en versions 4.3.30 et 5.3.18
Nom du module |
Utilité |
spring-core |
Les fondamentaux : gestion des objets et des proxy. |
spring-beans |
Le paramétrage et les fabriques de beans. |
spring-context |
Gestion du contexte, EJB, JMX, JNDI, scheduling, validation. |
spring-context-support |
Support ehcache, guava, mail, scheduling UI. |
spring-expression |
Expresssion language Spring : SpEL. |
L’AOP
Nom du module |
Utilité |
spring-aop |
AOP via les proxy. |
spring-aspects |
Aspects basés sur AspectJ. |
spring-instrument |
Agent d’instrumentation pour le bootstrapping de la JVM. |
spring-instrument-tomcat |
Agent d’instrumentation pour Tomcat. |
Les messages
Nom du module |
Utilité |
spring-messaging |
Pour avoir des applications basées sur les messages. |
Accès aux données
Nom du module |
Utilité |
spring-jdbc |
Facilités JDBC. |
spring-tx |
Gestion programmatique des transactions. |
spring-orm |
Mapping Hibernate (JPA et JDO). |
spring-oxm |
Mapping Object/XML comme JAXB, Castor, XMLBeans, JiBX et XStream. |
spring-jms |
Module Java Messaging Service et intégration spring-messaging depuis Spring Framework 4.1. |
Web
Nom du module |
Utilité |
spring-web |
Composants web. |
spring-webmvc |
Web services REST et web MVC. |
spring-websocket |
Web sockets. |
spring-webmvc-portlet |
Web dans un contexte portlet. |
Test
Nom du module |
Utilité |
spring-test |
Aide pour utiliser JUnit et TestNG avec Spring et objets mock. |
2. Sujets abordés
Comme nous l’avons vu dans l’avant-propos, Spring est très vaste. Nous ne pouvons tout traiter dans un seul ouvrage, cependant nous traiterons les sujets les plus utilisés, à savoir la partie arrière (back) des applications web et souvent mobiles, ainsi que la partie avant (front) pour laquelle nous nous limiterons aux applications web en incluant dans cette partie les services web. Nous décrirons les tests unitaires associés autant que possible. Les exemples sont issus de cas réels présents dans les projets téléchargeables. La programmation par aspect qui est très utilisée avec Spring est également détaillée....
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 qui date du 26/06/2003 avec le JDK 1.4 (JDK 1.5). Cette version est compatible avec le JDK 1.4 en patchant ce JDK pour avoir les annotations en avance de phase.
La version 1.0 est aussi disponible et compile moyennant des modifications mineures.
Nous retrouvons dans ces versions l’essence même de Spring.
Points clés
-
Le framework Spring est modulaire.
-
Nous utilisons Maven pour le configurer.
-
Les applications web et les tests sont les deux atouts de Spring.