I. Généralités
1. Présentation
Spring est un Framework qui est, à l'origine, créé pour permettre d'accélérer le développement d'applications Java EE; ce framework est modulaire et cela lui confère une certaine facilité pour la conception et la réalisation d'applications java E.E. Aujourd'hui il intègre d'autres implémentations d'autres technologies comme ".NET" ou Python.
Les modules de base de Spring (pour le développement d'application Java E.E) sont au nombre de 20 et l'efficacité de Spring par rapport à d'autres Framework Java est dû au faite qu'il se sert des beans (des simples POJO - ce ne sont pas des javabeans), de fichiers de configuration (fichiers XML) et d'annotations (à partir la version 2.5 les annotations Spring se sont renforcées ) .
Le Framework Spring utilise différentes pratiques de programmation éprouvées comme l'IoC (Inversion of Control), les design pattern comme le pattern Factory, le pattern Singleton pour ne citer que ces deux là. Avec le pattern Factory, Spring fournit deux types d'implémentation du conteneur IoC en se servant des interfaces BeanFactory et ApplicationContext. L’interface ApplicationContext dérive de l'interface BeanFactory ce qui permet de maintenir leur compatibilité et qui fait que les fichiers de configuration des beans des deux implémentations sont identiques.
Pourquoi utiliser Spring ?
Ci-dessous on donne une liste non exhaustive des raisons incitant à utiliser le Framework Spring :
- Spring permet de développer des applications d'entreprise en s'appuyant sur des simples POJO et on n'a pas besoin d'un conteneur d' EJB (au sein d'un serveur d'applications) mais uniquement d'un conteneur de Servlet robuste tel que Tomcat .
- Spring est modulaire. Même si le nombre de paquets et de classes est important, on se focalise uniquement sur les modules dont on a besoin.
- Spring utilise certaines technologies existantes en les intégrant comme modules; ainsi il agrège plusieurs modules dont certains frameworks ORM, des frameworks de journalisation, etc ...
- Spring permet de réaliser des tests avec simplicité . L' utilisation des POJO facilite l'injection de dépendance pour injecter des données de test.
- Son composant web Spring-MVC est un framework bien conçu qui fournit une excellente alternative aux frameworks web tels que Struts.
- Spring fournit une API pratique pour traduire les exceptions spécifiques à une technologie (par exemple pour JDBC, Hibernate ou JDO, ...) en exceptions cohérentes.
- Le conteneur IoC (Inversion of Control) est léger en particulier par rapport aux conteneurs EJB; ce qui est utile pour développer et de déployer des applications sur des ordinateurs avec des ressources mémoire et CPU limitées
- Spring fournit une interface de gestion des transactions cohérente qui peut évoluer vers une transaction locale (en utilisant une base de données unique, par exemple) et passer à des transactions globales (en utilisant JTA, par exemple).
Rien que pour ces raisons, Spring a su s'imposer par rapport à d'autres frameworks.
2. Fonctionnalités importantes de Spring
2.1. IoC (Inversion of Control - inversion de contrôle)
l’IoC est un principe général de conception pour la programmation et l’injection de dépendance (DI,Dependency Injection) est le design pattern concret qui l'incarne.
Spring IoC est un framework très complet et complexe. Son fonctionnement repose sur 3 éléments clés :
- La configuration par des fichiers XML pour lier les implémentations à leurs interfaces
- Les classes sont des beans et elles possèdent donc des getters et setters pour les champs à injecter
- L'injection est effectuée via un fichier de configuration (par défaut c'est ApplicationContext.xml) de Spring
2.3. DI (Dependance Injection - Injection de Dépendance)
Dans chaque application Java les objets (instances des différentes classes de l'application) échangent des informations pour permettre de présenter à l'utilisateur final un résultat . Lors de l'écriture d'une application complexe en Java, les classes doivent être aussi indépendantes que possibles les unes des autres afin d'augmenter la possibilité de les réutiliser et de les tester de façon indépendante lors des tests unitaires. C'est le concept de DI (injection de dépendances) qui permet à la fois d'avoir les classes liées entre elles tout en les gardant indépendantes.
Qu' est-ce que c'est l'Injection de Dépendance ?
L'injection de dépendances (Dependency Injection) est un mécanisme qui implémente le principe de l'inversion de contrôle (IoC) . Cela consiste à créer dynamiquement (injecter) les dépendances entre les différentes classes en s'appuyant sur une description (fichier de configuration ou métadonnées) ou de manière programmatique. Ainsi les dépendances entre composants logiciels ne sont plus exprimées dans le code de manière statique mais déterminées dynamiquement à l'exécution.
Il existe 4 types d'injections de dépendances :
- Injection par constructeur et par Setters
- Injection par interface
- Injection par mutateur
- Injection par champs
Spring prend en charge les injections de dépendance basées sur le constructeur et sur les setters
2.4. AOP (Aspect Orientation Programming - programmation Orientée Aspect)
Spring prend en charge la mise en œuvre de la programmation orientée aspect où on peut utiliser les Advices (concepts utilisé dans AOP), les Pointcuts ( concepts utilisé dans AOP) etc. pour découpler le code.
Le module aspects fournit un support pour l'intégration d'avec AspectJ.
Le module d'instrumentation prend en charge les implémentations d'instrumentation de classe et de chargeur de classe
(à suivre)..