Spring – Injection de dépendance (@Autowired, @Qualifier & @Ressource)

Spring – Injection de dépendance (@Autowired, @Qualifier & @Ressource)

Hello les amis, dans ce tuto nous allons voir comment faire l’injection de dépendance en utilisant l’annotation @Autowired, pour plus de detail sur le DI(Injection de dépendance) je vous invite mes amis d’aller voir ce lien.

1 –  @Autowired :

C’est une annotation qui nous permet de faire l’injection de dépendances entre les beans de l’application (Spring va tout faire), il suffit juste d’annoter un constructeur ou une méthode avec cette dernière. et le conteneur Spring va faire la suite(La creation du bean, le chercher et l’injecter automatiquement…).

  •  Pour bien comprendre le principe je vous propose de faire un petit exemple :

On va utiliser le principe du couplage faible “ne pas avoir beacoup de dépendance entre les classes de votre applicaion ce qui rend la maintenance de ce tte dernière facile”, donc on va créer une classe dao et une interface idao puis une classe metier qui va accéder à la partie dao en utilisant que l’interface :

Donc maintenant, on va créer la classe Metier et utiliser le principe de DI :

Donc, mtn une fois le conteneur Spring se lance, il va crée l’instance de la classe Dao et la classe Metier(Principe Ioc), et il va faire l’injection de dépendance (injecter l’objet créeé de la classe Dao dans la propriété de l’interface IDao qui existe dans la classe Metier)

  • Quelques remarques à retenir :

la valeur par défaut de l’annotation @Autowired est true, ca veut dire qu’il faut obligatoirement initialiser le bean à injecter, si le Conteneur Spring ne trouve pas le bean une exception de type BeanCreationException est levée, on peut bien sur modifier cette annotation en mettant la valeur à false comme suit :

@Autowired(required=false).

Le  conteneur spring va lever des exceptions de type BeanCreationException dans le deux cas suivant :

– Si @Autowired ne trouve aucun bean correspondant au type de l’entité annoté sauf si l’attribut requierd est false.

– Si @Autowired trouve plusieurs beans correspondants au type annoté et que l’élément n’est pas un tableau ou collection.

2 – @Qualifier :

A côté de l’annotation @Autowired, on peut utiliser d’autres annotations pour nous faciliter la vie :D, nous allons voir les annotations @Qualifier & @Ressource

@Qualifier : c’est une annotation utilisée lorsqu’on a plusieurs classes qui implémentent une interface, et on veux faire l’injection des dépendances en utilisant cet interface.

  • Un petit exemple pour bien comprendre :

Dans une seule application , on a une interface IDao qui sera implémentée par 3 classes : DaoJdbc, DaoHibernate, DaoSpringData.

La déclaration des 3 classes :

Dans la partie Métier on a une classe qui va utiliser la partie Dao(pour respecter la principe du couplage faible on va utiliser l’interface IDao) :

Donc puisqu’on 3 classes qui implémentent cette interface, on doit utiliser un truc pour spécifier à la partie métier quelle classe doit utiliser (utilisation de l’annotation Qualifier).

@Qualifier est utilisée donc pour montrer au Conteneur Spring la classe à injecter (dans le cas de plusieurs classes).

2 – @Resource:

L’annotation @Resource : on peut dire qu’elle s’agit d’une fusion entre l’annotation @Autowired et @Qualifier, ci-dessous un petit exemple :

On va utiliser l’exemple précèdent, ci-dessous la déclaration des 3 classes :

Vous avez remarqué qu’il n’ y a aucun changement au niveau de la première partie, par contre dans la partie Métier on a une classe qui va utiliser la partie Dao(pour respecter la principe du couplage faible on va utiliser l’interface IDao) :

Donc comme vous voyez au lieu d’utiliser deux annotation @Autowired et @Qualifier on utilise @Resource

 

 

 

Injection de dépendance – Méthode Setter

Injection de dépendance – Méthode Setter :

Dans ce tuto, nous allons voir comment faire une injection de dépendance en utilisant la méthode setter :

  • Injecter une variable primitive :
    Nous allons créer une classe Personne.java qui va contenir 2 variables (id et nom) et leurs méthodes setter et getterPersonne.java :


    applicationContext.xml :


    Classe d’éxecution (Main.java) :

  • Injecter un Objet :
    Dans le cas ou on a une relation entre deux classes une relation de type HAS-A, du coup nous avons besoin de créer l’instance de la classe B pour la faire passer au constructeur de la classe A. Nous allons prendre l’exemple d’une personne qui a une adresse.(Personne Has-A Adresse)

    Adresse.java :

    Personne.java :

     aplicationContext.xml :

    Classe d’éxecution(Main.java) :

     

     

Qu’est-ce que le framework spring

Qu’est-ce que le framework spring
Spring
est un framework très riche permettant de structurer, d’améliorer et de simplifier l’écriture d’application Java EE.
Spring est un framework libre, un conteneur dit « léger », c’est à dire une infrastructure similaire à un serveur d’application Java EE.

Architecture du framework Spring
Spring_Module

Avantages :
– Les applications Spring sont faiblement couplées grâce à l’injection de dépendance.
– Spring fournit des modèles pour JDBC, Hibernate, JPA, etc. Donc, il n’y a pas besoin d’écrire trop de code.
– Le test des applications est devenu plus facile en utilisant L’injection de dépendance.
– Spring est léger en raison de sa mise en œuvre POJO.
– Spring propose une très bonne intégration avec des frameworks open source(Struts, Jsf, Hibernate, etc…).

Inconvénients :
– les livrables peuvent avoir une taille importante à cause de nombreuses librairies requises par Spring et ses dépendances.

créer une application Spring

Spring est un framework très riche permettant de structurer, d’améliorer et de simplifier l’écriture d’application JEE. Spring est considéré comme un conteneur dit « léger ».

Pour créer une application Spring, nous devons suivre les étapes suivantes : Créer un projet Java, Ajouter les bibliothèques nécessaires (jar files) , Créer une classe java, créer le ficher “applicationContext.xml” et enfin une classe pour exécuter notre application.

– Créer un projet Java :
Afin de pouvoir créer un projet java en utilisant l’ide eclipse : File => New => Java Project
Creation_Projet_Java

– Création de la lasse (Cours.java) :

– Ajouter les bibliothèques nécessaires (jar files) :

Ajouter_Lib

– Création du fichier “applicationContext.xml”

– Création de la classe d’exécution(Main.java) :

– Résultat après l’exécution de la classe Main.java :
Resultat

 

Ci-après une video :

 

Les modules du framework Spring

Les modules du framework Spring :

Le framework Spring fournit environ 20 modules qui peuvent être utilisés sur la base d’une application.
Dans ce tuto nous allons voir les principaux modules :
Spring_Module

Spring Core : le noyau, qui contient à la fois un ensemble de classes utilisées par toutes les briques du framework et le conteneur léger.

Spring AOP : le module de programmation orientée aspect, qui s’intègre fortement avec AspectJ, un framework de POA à part entière.

Spring DAO : qui constitue le socle de l’accès aux dépôts de données, avec notamment une implémentation pour JDBC. D’autres modules fournissent des abstractions pour l’accès aux données (solutions de mapping objet-relationnel, LDAP) qui suivent les mêmes principes que le support JDBC. La solution de gestion des transactions de Spring fait aussi partie de ce module.

Spring ORM : qui propose une intégration avec des outils populaires de mapping objet-relationnel, tels que Hibernate, JPA, EclipseLink ou iBatis.

Spring WEB : le module comprenant le support de Spring pour les applications Web. Il contient notamment Spring Web MVC, la solution de Spring pour les applications Web, et propose une intégration avec de nombreux frameworks Web et des technologies de vue.

Spring Context : Ce module supporte l’internationalisation (I18N), EJB, JMS, Basic Remoting.

Qu’est-ce que le framework spring

Qu’est-ce que le framework spring ? Spring est maintenant plus qu’un conteneur léger, utilisé pour le développement d’applications d’entreprise. Il constitue le socle de nombreux projets. Il peut être considéré comme un framework de frameworks car il fournit un soutien aux différents framework tels que Struts, Hibernate, EJB, JSF etc. Le framework, en sens large, peut être définie comme une structure où l’on trouve la solution des différents problèmes techniques.

Il y a plusieurs avantages du framework Spring :

– Templates prédéfinis :
Le framework Spring fournit des templates pour JDBC, Hibernate, JPA, etc… Donc, il n’y a pas besoin d’écrire trop de code. Il cache les étapes de base de ces technologies.

– Couplage faible :
Les applications Spring sont faiblement couplés en raison de l’injection de dépendance.

– Facile à tester :
L’injection de dépendance rend plus facile à tester l’application

– léger :
Le framework Spring est léger en raison de sa mise en œuvre POJO. Le framework Spring ne force pas le programmeur d’hériter une classe ou mettre en œuvre n’importe quelle interface.

Les inconvénients du framework Spring :

Parfois les livrables aient une taille importante du fait des nombreuses librairies requises par Spring et ses dépendances.