Injection de d©pendances

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Injection de dépendances. Spring IoC & Google Guice. Ingénieurs 2000 | Xposé | Florian Gourier. Plan. Introduction Concepts Spring IoC Google Guice Conclusion. Introduction. Dérivé du principe d’inversion de contrôle Utilisé pour avoir des applications modulaires - PowerPoint PPT Presentation

Text of Injection de d©pendances

Injection de dpendances

Injection de dpendancesSpring IoC & Google GuiceIngnieurs 2000 | Xpos | Florian Gourier1

PlanIntroductionConceptsSpring IoCGoogle GuiceConclusion2

IntroductionDriv du principe dinversion de contrleUtilis pour avoir des applications modulairesFacilite lutilisation de MocksUtilis pour la programmation oriente aspect

IntroductionConceptsSpring IoCGoogle GuiceConclusion

3Un terme a 25 dollar pour un concept a 5 cents25/01/20113IntroductionPlusieurs types dinjection :Injection par constructeurInjection par interfaceInjection par mutateurInjection par champs

IntroductionConceptsSpring IoCGoogle GuiceConclusion

4Un terme a 25 dollar pour un concept a 5 cents25/01/20114

ConceptsIntroductionConceptsSpring IoCGoogle GuiceConclusion

5ConceptsDpendance : utilisation de mthodes dune autre classeGnralement fait par un new dans le codePas modulaire, difficile maintenir, ne permet pas le changementCas de base

IntroductionConceptsSpring IoCGoogle GuiceConclusion

6ConceptsPermet la classe A dutiliser une interfacePlusieurs implmentations de linterfaceToujours un new dans le code de APas beaucoup avancAvec une interface

IntroductionConceptsSpring IoCGoogle GuiceConclusion

7ConceptsUn seul new de la classe B dans tout le codeChangement dimplmentation facilePattern Factory lourd, pas toujours videntAvec une factory

IntroductionConceptsSpring IoCGoogle GuiceConclusion

8ConceptsPassage de limplmentation dans le constructeurRapide coder, facile utiliserDispersion des implmentations dans le code

En injectant manuellementIntroductionConceptsSpring IoCGoogle GuiceConclusion

9

ConceptsLes avantagesChanger dimplmentation sans changer le codeTrs maintenablePlusieurs configurations possibles

Tester une application avec des mocks sans recompilerTestabilit facileMeilleure qualitIntroductionConceptsSpring IoCGoogle GuiceConclusion

10Concepts

IntroductionConceptsSpring IoCGoogle GuiceConclusion

11Cest trs maintenable, cest trs testable, cest donc le bonheur pour le developpeur25/01/201111ConceptsLes frameworksPicoContainer (Constructeur)Avalon (Interface)Spring IoC (Mutateurs)Google Guice (Champs & Constructeur)IntroductionConceptsSpring IoCGoogle GuiceConclusion

12ConceptsLes frameworksIntroductionConceptsSpring IoCGoogle GuiceConclusion

13

Spring IoCFramework lger pour le dveloppement J2EE3 concepts : Linversion de contrleLa Programmation Oriente AspectUne couche dabstractionPremier framework trs utilisSpring

IntroductionConceptsSpring IoCGoogle GuiceConclusion

14Spring IoCUtilise une configuration xml pour lier interface et implmentationLes classes sont des beans (possdent getters et setters)Cration dun ApplicationContext pour charger le fichier xmlPrincipe de fonctionnementIntroductionConceptsSpring IoCGoogle GuiceConclusion

15Spring IoCDclaration des liaisons interface/implmentationUtilisation des champs pour linjection Nommage identique champ classe/xmlPrincipe de fonctionnement (configuration)

IntroductionConceptsSpring IoCGoogle GuiceConclusion

16Principe du tweet : -publication dun message court sur son profil afin quil soit lisible par tous les abonns (ici le profil sera la console)Principe du shortener : -les URL sont parfois longues et dures retenir, il est donc necessaire de pouvoir les rduire.25/01/201116Spring IoCBesoin de getters et setters pour les classes injecterPas de changement des habitudes de programmation

Principe de fonctionnement (beans)private Tweeter tweet;private Shortener shorten;

public Tweeter getTweet() {return tweet;}public void setTweet(Tweeter tweet) {this.tweet = tweet;}public Shortener getShorten() {return shorten;}public void setShorten(Shortener shorten) {this.shorten = shorten;}IntroductionConceptsSpring IoCGoogle GuiceConclusion

17Spring IoCChargement du xml pour chaque classe injection Localisation du fichier xml Nom du bean que lon rcupre

Principe de fonctionnement (contexte)ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");TweetClient tweeter = (TweetClient) context.getBean("tweetClient");tweeter.publishWithUrl("message", "http://tweeter.com");

IntroductionConceptsSpring IoCGoogle GuiceConclusion

18Spring IoCLes plus :SpringChoix multiples pour linjectionPas besoin de recompilerLes moins :Xml => lourdSyntaxe contraignante

Avantages/InconvnientsIntroductionConceptsSpring IoCGoogle GuiceConclusion

19

Spring IoCDmonstration

IntroductionConceptsSpring IoCGoogle GuiceConclusion

20Histoire de volvo25/01/201120Google GuicePlus connu pour son moteur de recherche et ses applications webDvelopp pour tre meilleur que Spring IoCUtilis dans la plupart des applications de googleGoogle

IntroductionConceptsSpring IoCGoogle GuiceConclusion

21Google => besoin dexpliquer ? Je suis sur quactuellement il ya une personne au moins en train de chercher un truc dessus dans le fond de la salle25/01/201121Google GuiceUtilise des abstractModule pour faire la liaison interfaceimplmentationUtilise lannotation @Inject pour dclarer les classes injecterUtilise un Injector pour charger le module dans notre applicationPrincipe de fonctionnementIntroductionConceptsSpring IoCGoogle GuiceConclusion

22Google Guicetendent la classe AbstractModule de GuiceUn module peut effectuer plusieurs associationsUne application peut avoir plusieurs modules (1module = 1configuration)

Principe de fonctionnement (les modules) public class MainModule extends AbstractModule { protected void configure() { bind(Tweeter.class).to(SmsTweeter.class); bind(Shortener.class).to(BasicShortener.class);} IntroductionConceptsSpring IoCGoogle GuiceConclusion

23Google GuiceLes interfaces qui doivent tre injectes sont annote avec lannotation InjectPossibilitdannoter le constructeur ou bien les champs directementAnnotation respectant la JSR299 depuis Guice 2.1

Principe de fonctionnement (linjection)public class TweetClient { private final Shortener shortener; private final Tweeter tweeter;

@Inject public TweetClient(Shortener shortener, Tweeter tweeter) { this.shortener = shortener; this.tweeter = tweeter; }IntroductionConceptsSpring IoCGoogle GuiceConclusion

24JSR 299 : Contexts and Dependency Injection for the JavaTM EE platform25/01/201124Google GuiceInjecteur Guice pour charger le module dans notre applicationToutes dpendances et sous dpendances rsolues partir du module

Principe de fonctionnement (linjecteur)public static void main(String[] args) { Injector injector = Guice.createInjector(new TweetModule()); TweetClient tweetClient = injector.getInstance(TweetClient.class); tweeter.publishWithUrl("message", "http://tweeter.com"); }IntroductionConceptsSpring IoCGoogle GuiceConclusion

25Google GuiceLes plus :RapideFacile dutilisationLes moins :Cas complexes non grsBesoin de recompilerAvantages/InconvnientsIntroductionConceptsSpring IoCGoogle GuiceConclusion

26

Google GuiceDmonstration

IntroductionConceptsSpring IoCGoogle GuiceConclusion

27Expliquer diffrence avec Spring25/01/201127ConclusionRduit le temps de maintenance en cas de changementPermet plusieurs configurations avec le mme codePermet lutilisation de Mocks facilementFacile prendre en mainLinjection de dpendanceIntroductionConceptsSpring IoCGoogle GuiceConclusion

28

ConclusionFrameworks trs similairesSpring reste trs utilis dont lIoCMais lourd et format compliqu utiliser avec le framework SpringSinon Guice trs lger et plus agrable utiliserSpring ou Guice ?IntroductionConceptsSpring IoCGoogle GuiceConclusion

29Webographiehttp://www.springsource.com/http://code.google.com/p/google-guice/http://www.picocontainer.org/http://excalibur.apache.org/http://www.dotnetguru.org/articles/dossiers/ioc/ioc.htmhttp://martinfowler.com/articles/injection.html

30Des questions ? 31