Vous êtes sur la page 1sur 21

Belhassen OUESLATI

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 1


Vue d’ensemble

Objectifs de la présentation:

Fournir les bases conceptuelles nécessaires à la


bonne mise en œuvre de Spring
Initier à l’utilisation de son conteneur léger

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 2


Sommaire

Partie I : Les fondations de Spring

I- Les concepts des conteneurs légers :

L’inversion de contrôle
Contrôle du flot d’exécution
L’inversion de contrôle au sein des conteneurs légers

L’injection de dépendances
Recherche de dépendances
Injection de dépendances

Gestion du cycle de vie des objets


La gestion des singletons

Conclusion

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 3


I- Les concepts des conteneurs légers :

L’inversion de contrôle :

Les conteneurs légers = Conteneurs d’inversion de contrôle


IoC (Inversion of Control) Container

C’est quoi le concept d’inversion de contrôle?


Comprendre le fonctionnement de ces conteneurs

Contrôle = contrôle du flot d’exécution d’une application

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 4


- Effet de l’inversion de contrôle sur le flot d’exécution
belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 5
I- Les concepts des conteneurs légers (suite) :

L’inversion de contrôle (suite) :

Contrôle du flot d’exécution :


Programmation procédurale : permet de maîtriser totalement le flux
d’exécution de notre programme via des instructions, des conditions et
des boucles.

Dans le cas du framework Web Struts, il est évident qu’il implémente


une inversion de contrôle puisqu’il se charge d’appeler lui-même les
actions de l’application en fonction des requêtes envoyées par les
navigateurs Web.

Avec le mécanisme de l’inversion de contrôle, ce n’est plus notre


programme qui se charge de contrôler le flux d’exécution de bout en
bout.

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 6


I- Les concepts des conteneurs légers (suite) :

L’inversion de contrôle (suite) :

Contrôle du flot d’exécution (suite) :


L’inversion de contrôle est aussi appelée principe « Hollywood »
en référence à la phrase mythique « ne nous appelez pas, nous vous
appellerons ».

Le principe de l’inversion de contrôle est un principe générique utilisé


par de nombreux Framework apparus bien avant la notion de
conteneur léger.

C’est quoi la nouveauté introduite par les conteneurs légers en la


matière?

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 7


I- Les concepts des conteneurs légers (suite) :

L’inversion de contrôle (suite) :

L’inversion de contrôle au sein des conteneurs légers :


 Les conteneurs légers proposent une version spécialisée de
l’inversion de contrôle. Ils se concentrent sur :
La gestion des dépendances entre objets+ leur instanciation
Dissociation des interfaces et des implémentations.

Principe de l’inversion de contrôle au sein des conteneurs légers :


Plutôt que de laisser l’application maîtriser la fabrication des
objets dont elle a besoin et la gestion de leurs dépendances
un framework de création d’objets doit pouvoir prendre en
charge cette problématique de manière générique (voir TD-1).

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 8


Sommaire

Partie I : Les fondations de Spring

I- Les concepts des conteneurs légers :

L’inversion de contrôle
Contrôle du flot d’exécution
L’inversion de contrôle au sein des conteneurs légers

L’injection de dépendances
Injection de dépendances via le constructeur
Injection de dépendances via les modificateurs (setters)

Gestion du cycle de vie des objets


La gestion des singletons

Conclusion

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 9


I- Les concepts des conteneurs légers :

L’injection de dépendances :

Les conteneurs légers peuvent être classés en deux catégories en


fonction de la façon dont ils gèrent les dépendances entre objets :
• Les conteneurs légers qui utilisent la recherche de dépendances
• Les conteneurs légers qui utilisent l’injection de dépendances

Spring = Conteneur légers utilise essentiellement l’injection


Conteneur IoC de dépendances pour gérer les
dépendance entre objets.

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 10


I- Les concepts des conteneurs légers (suite) :

L’injection de dépendances (suite) :

L’injection de dépendances existe sous deux formes :


• injection de dépendances via le constructeur ;
• injection de dépendances via les modificateurs (setters) ;

Comment procéder à l’injection de dépendance ?

1. Le conteneur léger initialise directement les objets libérant ainsi


l’application de cette charge

2. Au lieu d’utiliser l’opérateur new, le conteneur léger injecte dans


l’application les instances dont elle a besoin.

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 11


I- Les concepts des conteneurs légers (suite) :
L’injection de dépendances (suite) :

Comment effectué
cette initialisation ?
Principe général
de l’injection de
dépendances

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 12


I- Les concepts des conteneurs légers (suite) :

L’injection de dépendances (suite) :

Comment effectué cette initialisation ?


Pour effectuer cette initialisation, le conteneur peut implémenter
deux méthodes :
L’injection de dépendances via le constructeur
L’injection de dépendances via les modificateurs

Injection de dépendances via le constructeur


En Java, toute classe dispose d’un constructeur , qu’il soit explicite, ou
par défaut.
Le rôle d’un constructeur est de construire une instance d’une certaine
classe dans un état valide.
Si cet objet possède des dépendances (sous forme d’attributs)
avec d’autres objets, ces dépendances sont initialisées par le
constructeur.

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 13


I- Les concepts des conteneurs légers (suite) :

L’injection de dépendances (suite) :

Injection de dépendances via le constructeur

public class ConstructorInjection {


private Dependency dep;
public ConstructorInjection(Dependency dep) {
this.dep = dep;
} Le conteur léger transmettre
} au constructeur l’instance de
la dépendance désirée

Cette méthode d'injection impose au développeur de résoudre


tous les liens vers d'autres composants a l'initialisation dans son
constructeur.

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 14


I- Les concepts des conteneurs légers (suite) :

L’injection de dépendances (suite) :

Injection de dépendances via les Setter :

On récupère une instance de Composant1Impl via le conteneur léger :


 Il se charge d’instancier le composant Composant1Impl
 Il instancie les dépendances (Composant2Impl) et les injecte dans
le composant Composant1Impl

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 15


Sommaire

Partie I : Les fondations de Spring

I- Les concepts des conteneurs légers

L’inversion de contrôle
Contrôle du flot d’exécution
L’inversion de contrôle au sein des conteneurs légers

L’injection de dépendances
Injection de dépendances via le constructeur
Injection de dépendances via les modificateurs (setters)

Gestion du cycle de vie des objets


La gestion des singletons

Conclusion

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 16


I- Les concepts des conteneurs légers (suite) :

Gestion du cycle de vie des objets :

 La gestion du cycle de vie des objets comporte généralement pour les


conteneurs légers deux volets :
La gestion des singletons
La génération d’événements indiquant le changement d’état de l’objet

La gestion des singletons :

 Comment une classe ne peut avoir qu’une seule instance au sein


d’une application ?

Elle doit implémenter le design pattern singleton

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 17


I- Les concepts des conteneurs légers (suite) :
Gestion du cycle de vie des objets (suite) :

La gestion des singletons (suite) :

Un singleton est souvent implémenté de la manière suivante :

public class TodoManagerImpl implements TodoManager {


(...)
private static TodoManagerImpl todo = new TodoManagerImpl();

public TodoManagerImpl getInstance() { 2


return todo ;
}
private TodoManagerImpl() { 1
(...)
}
}

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 18


I- Les concepts des conteneurs légers (suite) :
Gestion du cycle de vie des objets (suite) :

La gestion des singletons (suite) :

Le constructeur a une portée privée afin d’éviter que des instances


1 de la classe puissent être créées en dehors de celle-ci par des
appels à l’opérateur new.

2
Seule la méthode getInstance peut être utilisée pour récupérer
l’instance unique de la classe.

Cette implémentation du design pattern singleton est :


Dépendante de la classe à instancier
Empêchant toute réutilisation Mécanique de duplication

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 19


I- Les concepts des conteneurs légers (suite) :
Gestion du cycle de vie des objets (suite) :

La gestion des singletons (suite) :

Comment on peut contrôler le nbr d’instances créées et de


solutionner ainsi le problème de la duplication ?

Solution : À travers le conteneur léger Comment ?

Puisque le conteneur léger assure l’instanciation des objets, il est


en mesure de
Contrôler le nbr d’instances créées
Solutionner ainsi le problème de la duplication de la mécanique
du singleton au sein des classes devant implémenter ce design
pattern Il suffit de déclarer une classe comme étant
un singleton auprès du conteneur léger pour que
celui-ci ne génère qu’une instance unique

belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 20


Conclusion

 Grâce à l’injection de dépendances et à la gestion du cycle de vie des


objets, les modèles de conception sont implémentés directement au
sein du conteneur léger, libérant ainsi l’application de leur
implémentation spécifique.

 Cependant, il est important de garder à l’esprit que L’injection


de dépendances est un outil permettant de rendre une modélisation
plus flexible.

Belhassen.oueslati@gmail.com TIME UNIVERSITY-2012 21

Vous aimerez peut-être aussi