Vous êtes sur la page 1sur 16

Inversion de contrle

Prpar par: Oussanaa Rachid Najem Imad Eddine

Encadr par : Pr Khalid Nafil

Plan
Introduction Inversion de contrle IoC Les objectifs Exemple Injection de dpendance DI Types de DI Les Conteneurs DI Spring

Inversion de contrle IoC


Linversion de contrle est un design pattern. Il fonctionne selon le principe que le flot d'excution d'un logiciel n'est plus sous le contrle direct de l'application elle-mme mais du framework ou de la couche logicielle sous-jacente.

Les objectifs :
Faire que le code ait : Un faible couplage Une forte cohsion Plus de flexibilit Rendre les tests unitaires possible Comment? Dplacez la cration des dpendances en dehors de la classe o ils sont utiliss.

Injection de dpendance
L'injection de dpendances est le mcanisme qui permet d'implmenter le principe d'inversion de contrle. Il consiste crer dynamiquement (injecter) les dpendances entre les diffrentes classes en s'appuyant sur une description (fichier de configuration ou mtadonnes). Ainsi les dpendances entre composants logiciels ne sont plus exprimes dans le code de manire statique mais dtermines dynamiquement l'excution.

Types dinjection de dpendances


Constructeur (Le plus utilis) Setter Interface

Shma :
IoC

DI

Constructeur

Interface

Setter

Code traditionnelle
public class CameraMan { Picture pic; public void shoot() { pic = new Picture(); pic.action(); } }

public class Picture{ public void action() { println(take Picture"); } }

public class Video{ public void action() { println(take video"); } }

Setter
public class CameraMan { Picture pic; void setPic(Picture pic2){ this.pic = pic2; } public void shoot() { pic.action(); } }

public class Picture{ public void action() { println(take Picture"); } }

public class Video{ public void action() { println(take video"); } }

public Interface Camera{ public void action(); }

Constructeur
public class CameraMan { Camera cam; CameraMan(Camera cam2){ cam= cam2; } public void shoot() { cam.action(); } }

public class Picture implements Camera{ public void action() { println(take Picture"); } }

public class Video implements Camera{ public void action() { println(take video"); } }

Main Class :
public class MainClass { public static void main(String[] args) { Picture pic = new Picture(); Video vid = new Video(); CameraMan cMan = new CameraMan(pic); cMan.shoot(); } }

Qui va grer linjection des dpendances ?


Les containers

Les Conteneurs DI
Cre des objets qui sont prts utiliser Sait comment crer des objets et leurs dpendances Sait comment initialiser des objets lorsqu'ils sont crs Assure un soutien du cycle de vie Un conteneur n'est rien de plus qu'un dictionnaire d'interfaces et de leurs implmentations

Les Conteneurs DI
spring Framework Unity Castle Windsor Ninject StructureMap

Comment Spring gre lIoC


crire un fichier de configuration dans lequel vous nommez vos "beans". lier l'application ensemble en crivant les beans qui sont dpendants les uns des autres. Instancier un objet de Spring appel ApplicationContext. Il s'agit d'un type d'usine de beans qui instancie tous vos autres beans et gre l'injection de dpendance.

Vous aimerez peut-être aussi