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

 

 

 

Les Services AngularsJS

Les Services AngularJS :

Qu’est ce qu’un Service AngularJS

Un Service AngularJS  est un Singloton (ils ne sont instanciés qu’une seule fois « et non une fois par importation ») nous fournit un ensemble de tâches pour faire fonctionner une application AngularJS, on a plusieurs services qui sont prêt à l’emploi, ils sont précédés du symbole $, nous allons voir quelques exemples :

  • $location : contient des méthodes pour intéragir avec votre URL(page web actuelle)
  • $http : Communication avec le serveur
    Nous allon faire un exemple pour bien comprendre le pricipe du Service $http, nous allons créer un fichier data.js dans lequel nous allons stocker les données et un fichier index.html pour les afficherdata.js :

    index.html :

Comment créer votre propre Service AngularJs :

un Service angularJS est tout simplement un module, pour créer un service AngularJS on a le droit d’utiliser 5 méthodes, qui sont les uivantes :

  • service()
  • factory()
  • provider()
  • value()
  • constant()

Pour bien comprendre le pricipe, nous allons prendre l’exemple de la méthode service() :

Nous avons créé un service permettant de faire la mutiplication par 2.

Les Filtres AngularJS

Les Filtres AngularJS :

AngularJs contient des Filtres pour formater les données, ci-dessous quelques exemple :

- currency : Formater un nombre en format devise

- date : Formater une date

uppercase : Afficher une chaine de caractére en majuscule

lowercase : Afficher une chaine de caractére en miniscule

- orderBy : Ce filtre, o va l’ajouter dans une directive, il est utilisé pour modifier l’ordre en choisissant un critére

- filter : on l’utilise pour filtrer dans les tableaux, par exemple on veux filtrer un liste et chercher les noms qui contient la lettre ‘r’

– On va utiliser une zone de texte pour donner la main à l’utilisateur de faire la recherche, pour ce faire on va utiliser ng-model :

 

Synchronisation des données entre la vue et le model (binding des données)

Synchronisation des données entre la vue et le model (binding des données) :

Dans ce tuto, nous allons voir comment faire pour synchroniser les données entre la partie vue (html) et model (controller).

Qu’est-ce que le data-binding ?

Tout simplement, c’est la liason entre la partie vue de votre application (view) et la partie logique (model). Donc, pour bien comprendre le principe, nous allons les directives suivantes.

 1. ng-bind :

Cette directive est utilisée pour faire la liason entre un élément HTML (view) et une propriété dans la partie logique (model).
N.B : Cette directive est utilisée juste pour l’affichage des propriétés, on peut l’utiliser par exemple dans une balise <p>

Exemple :

Remarque :

On peut utiliser l’expression {{}} au lieur de la directive ng-bind, cidessous un exemple :

2. ng-model :

On peut dire que la directive ng-model joue le rôle inverse de la directive ng-bind, cette dernière nous permet de lire une donée entrante par un utilisateur et l’envoyer au model pour traitement, on peut l’utiliser avec les balises (input, select, textarea,…).

Exemple :

 

 

Directives Angular JS

Directives Angular JS :

Les directives Angular JS, peuvent être utilisées au sein du code HTML avec une condition, elles doivent être prefixées par ng-.
NB : Vous pouvez créer vos propres directives.

Quelques exemples :

  • ng-app : définie l’élement pricipal de l’application angular JS.
  • ng-init : pour initialiser les données de l’application.
  • ng-model : récupérer la valeur envoyée dans la partie HTML et l’envoyer dans la partie JS pour traitement.
  • ng-repeat : Pour répéter des élements HTML.

Exemple :

Création d’une directive :

Pour créer votre propre directire, il faut utiliser la fonction .directive
Quand vous l’avez créee, il faut la nommer en utilisant la norme caseCamel (myDirective) et en l’appellant comme suit my-directive

Exemlpe :

Vous pouvez appeller une directive en utilisant :

  • une balise : <my-directive></my-directive>
  • un attribut : <div my-directive></div>
  • class : <div class= »my-directive »></div>
  • commentaire : <!– directive: my-directive –>

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) :

     

     

Injection de dépendance – Par Constructeur

Injection de dépendance – Par Constructeur :

Dans ce tuto, nous allons voir les différentes maniere pour faire une injection de dépendance par Constructeur.

    • Injecter une variable Primitive :
      Nous allons créer une classe Personne.java qui va contenir 2 variables (id et nom), trois constructeurs et une methode, ci-dessous le code source

      Nous allons maintenant créer le fichier applicationContexte.xml, c’est au niveau de ce fichier que nos objets seront créés ainsi que leur injection.

      L’injection dans ce cas se fait par un Constructeur, donc on va utiliser constructor-arg

      En fin, nous allons créer la classe d’exécution :

      Résultats :

    • 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 :
      Nous pouvons injecter des valeurs de collections en utilisant un constructeur, trois éléments peuvent être utilisés dans le tag <constructeur-arg> : List, Set, Map. Puisque les trois éléments sont utilisés de la même manière nous allons faire l’exemple de List.Personne.java :

      applicationContext.xml :


      Classe d’éxecution(Main.java) :


       
    • Injecter une collection :
      Nous pouvons injecter des valeurs de collections en utilisant un constructeur, trois éléments peuvent être utilisés dans le tag <constructeur-arg> : List, Set, Map. Puisque les trois éléments sont utilisés de la même manière nous allons faire l’exemple de List.Dans ce cas nous allons utiliser la classe Client, un client peut passer plusieurs commandes :Client.java :

      applicationContext.xml :

      Classe d’éxecution(Main.java) :

       


       

       

       

Spring – Injection de dépendance(DI)

Spring – Injection de dépendance(DI) :

L’injection de dépendance(DI) est un design pattern qui nous permet de supprimer les dépendances entre les objets et de faire l’injection automatiquement lors du démarage du conteneur Spring, ce dernier facilite la gestion de l’appli, test et maintenance de l’application, le couplage du code est faible, donc on peut changer dans l’application sans faire bcp de modifications dans le code.

Les informations seront fournies depuis un fichier xml.

Nous avons deux façons pour faire l’injection de dépendance :

 

Le design pattern Singleton

Le design pattern Singleton

Le design pattern Singleton est un patron de conception qui est utilisé pour s’assurer qu’une classe ne sera instanciée qu’une seule fois. l’utilisation de ce dernier rend l’application plus rapide car il libére la mémoire puisque l’objet ne se crée qu’une seule fois.

Le singleton contenant une méthode qui crée une instance uniquement s’il n’en existe pas encore. Sinon elle renvoie une référence vers l’objet qui existe déjà. Le constructeur de la classe doit être privé, afin de s’assurer que la classe ne puisse être instanciée autrement que par la méthode de création contrôlée.

Dans les applications multi-thread la méthode doit être déclarée avec lemot clé synchronized. Si deux processus légers exécutent en même temps la méthode de création alors que l’objet unique n’existe pas encore, il faut absolument s’assurer qu’un seul créera l’objet, et que l’autre obtiendra une référence vers ce nouvel objet.

Pour appeler la méthode sans instancier la classe, il faudrait la déclarer static.

Ci-dessous une vidéo pour vous montrer un exemple d’utilisation du dusign pattern Singleton.

Statement & PreparedStatement

Statement & PreparedStatement

Statement : c’une interface qui nous fournit des méthodes pour exécuter des requêtes avec une bd. Cette dernière est une usine de Resultset.

Les méthodes qu’on peut utiliser sont les suivantes :

– public ResultSet executeQuery(String sql) : on l’utilise pour executer une requete de type select, elle nous retourne un objet de type ReseltSet.

public int executeUpdate(String sql) : utiliser pour executer une requete de type create, drop, insert, update ou delete.

public boolean execute(String sql) : pour executer des requetes qui vont retourner plusieurs résultats.

public int[] executeBatch() : pour executer des commandes batch.

PreparedStatement : c’une sous interface de Statement, on l’utilise pour exécuter des requêtes paramètres. L’utilisation de PreparedStatement rend l’application rapide car les requêtes paramètres sont compilées une seule fois.