Injection de dpendances Spring Io C Google Guice

  • Slides: 31
Download presentation
Injection de dépendances Spring Io. C & Google Guice 1 Ingénieurs 2000 | Xposé

Injection de dépendances Spring Io. C & Google Guice 1 Ingénieurs 2000 | Xposé | Florian Gourier

Plan n Introduction n Concepts n Spring Io. C n Google Guice n Conclusion

Plan n Introduction n Concepts n Spring Io. C n Google Guice n Conclusion 2

Introduction n Concepts Spring Io. C n Google Guice Conclusion n n Dérivé du

Introduction n Concepts Spring Io. C n Google Guice Conclusion n n Dérivé du principe d’inversion de contrôle Utilisé pour avoir des applications modulaires Facilite l’utilisation de Mocks Utilisé pour la programmation orientée aspect 3

Introduction Concepts n Plusieurs types d’injection : u Injection par constructeur Spring Io. C

Introduction Concepts n Plusieurs types d’injection : u Injection par constructeur Spring Io. C Google Guice Conclusion u Injection par interface u Injection par mutateur u Injection par champs 4

Concepts Introduction Concepts Spring Io. C Google Guice Conclusion 5

Concepts Introduction Concepts Spring Io. C Google Guice Conclusion 5

Concepts Cas de base n Introduction Concepts n Dépendance : utilisation de méthodes d’une

Concepts Cas de base n Introduction Concepts n Dépendance : utilisation de méthodes d’une autre classe Généralement fait par un « new » dans le code Spring Io. C Google Guice n Pas modulaire, difficile à maintenir, ne permet pas le changement Conclusion 6

Concepts Avec une interface Introduction n Permet à la classe A d’utiliser une interface

Concepts Avec une interface Introduction n Permet à la classe A d’utiliser une interface n Plusieurs implémentations de l’interface n Toujours un « new » dans le code de A n Pas beaucoup avancé Concepts Spring Io. C Google Guice Conclusion 7

Concepts Avec une factory Introduction Concepts n Un seul new de la classe B

Concepts Avec une factory Introduction Concepts n Un seul new de la classe B dans tout le code n Changement d’implémentation facile n Pattern Factory lourd, pas toujours évident Spring Io. C Google Guice Conclusion 8

Concepts En injectant manuellement Introduction Concepts n Passage de l’implémentation dans le constructeur n

Concepts En injectant manuellement Introduction Concepts n Passage de l’implémentation dans le constructeur n Rapide à coder, facile à utiliser n Dispersion des implémentations dans le code Spring Io. C Google Guice Conclusion 9

Concepts Les avantages Introduction n Changer d’implémentation sans changer le code Concepts Ø Spring

Concepts Les avantages Introduction n Changer d’implémentation sans changer le code Concepts Ø Spring Io. C Ø Très maintenable Plusieurs configurations possibles Google Guice Conclusion n Tester une application avec des mocks sans recompiler Ø Ø Testabilité facile Meilleure qualité 10

Concepts Introduction Concepts Spring Io. C Google Guice Conclusion 11

Concepts Introduction Concepts Spring Io. C Google Guice Conclusion 11

Concepts Les frameworks Introduction n Pico. Container (Constructeur) n Avalon (Interface) n Spring Io.

Concepts Les frameworks Introduction n Pico. Container (Constructeur) n Avalon (Interface) n Spring Io. C (Mutateurs) n Google Guice (Champs & Constructeur) Concepts Spring Io. C Google Guice Conclusion 12

Concepts Les frameworks Introduction Concepts Spring Io. C Google Guice Conclusion 13

Concepts Les frameworks Introduction Concepts Spring Io. C Google Guice Conclusion 13

Spring Io. C Spring n Framework « léger » pour le développement J 2

Spring Io. C Spring n Framework « léger » pour le développement J 2 EE n 3 concepts : Introduction Concepts L’inversion de contrôle u La Programmation Orientée Aspect u Une couche d’abstraction u Spring Io. C Google Guice Conclusion n Premier framework très utilisé 14

Spring Io. C Principe de fonctionnement Introduction n Utilise une configuration xml pour lier

Spring Io. C Principe de fonctionnement Introduction n Utilise une configuration xml pour lier interface et implémentation Concepts Spring Io. C n Google Guice Les classes sont des beans (possèdent getters et setters) Conclusion n Création d’un Application. Context pour charger le fichier xml 15

Spring Io. C Principe de fonctionnement (configuration) Introduction Concepts n Déclaration des liaisons interface/implémentation

Spring Io. C Principe de fonctionnement (configuration) Introduction Concepts n Déclaration des liaisons interface/implémentation n Utilisation des champs pour l’injection Spring Io. C Google Guice u Nommage identique champ classe/xml Conclusion <bean id="Basic. Shortener" class="impl. Basic. Shortener"></bean> <bean id="Sms. Tweeter" class="impl. Sms. Tweeter"></bean> <bean id="tweet. Client" class="core. Tweet. Client"> <property name="tweet" ref="Sms. Tweeter"/> <property name="shorten" ref="Basic. Shortener"/> </bean> 16

Spring Io. C Principe de fonctionnement (beans) Introduction n injecter Concepts Spring Io. C

Spring Io. C Principe de fonctionnement (beans) Introduction n injecter Concepts Spring Io. C n Google Guice Conclusion Besoin de getters et setters pour les classes à Pas de changement des habitudes de programmation private Tweeter tweet; private Shortener shorten; public Tweeter get. Tweet() {return tweet; } void set. Tweet(Tweeter tweet) {this. tweet = tweet; } Shortener get. Shorten() {return shorten; } void set. Shorten(Shortener shorten) {this. shorten = shorten; } 17

Spring Io. C Principe de fonctionnement (contexte) Introduction Concepts n Chargement du xml pour

Spring Io. C Principe de fonctionnement (contexte) Introduction Concepts n Chargement du xml pour chaque classe à injection n Localisation du fichier xml n Nom du bean que l’on récupère Spring Io. C Google Guice Conclusion Application. Context context = new Class. Path. Xml. Application. Context("beans. xml"); Tweet. Client tweeter = (Tweet. Client) context. get. Bean("tweet. Client"); tweeter. publish. With. Url("message", "http: //tweeter. com"); 18

Spring Io. C Avantages/Inconvénients Introduction n Les plus : Concepts u. Spring Io. C

Spring Io. C Avantages/Inconvénients Introduction n Les plus : Concepts u. Spring Io. C u. Choix multiples pour l’injection Google Guice u. Pas besoin de recompiler Conclusion n Les moins : u Xml => lourd u Syntaxe contraignante 19

Spring Io. C Démonstration Introduction Concepts Spring Io. C Google Guice Conclusion 20

Spring Io. C Démonstration Introduction Concepts Spring Io. C Google Guice Conclusion 20

Google Guice Google Introduction n applications web Concepts Spring Io. C Plus connu pour

Google Guice Google Introduction n applications web Concepts Spring Io. C Plus connu pour son moteur de recherche et ses n Développé pour être « meilleur » que Spring Io. C n Utilisé dans la plupart des applications de google Guice Conclusion 21

Google Guice Principe de fonctionnement Introduction n interface implémentation Concepts Spring Io. C Utilise

Google Guice Principe de fonctionnement Introduction n interface implémentation Concepts Spring Io. C Utilise des abstract. Module pour faire la liaison n Utilise l’annotation @Inject pour déclarer les classes à injecter Google Guice Conclusion n Utilise un Injector pour charger le module dans notre application 22

Google Guice Principe de fonctionnement (les modules) n Étendent la classe Abstract. Module de

Google Guice Principe de fonctionnement (les modules) n Étendent la classe Abstract. Module de Guice Concepts n Un module peut effectuer plusieurs associations Spring Io. C n Introduction Google Guice Une application peut avoir plusieurs modules (1 module = 1 configuration) Conclusion public class Main. Module extends Abstract. Module { protected void configure() { bind(Tweeter. class). to(Sms. Tweeter. class); bind(Shortener. class). to(Basic. Shortener. class); } 23

Google Guice Principe de fonctionnement (l’injection) Introduction Les interfaces qui doivent être injectées sont

Google Guice Principe de fonctionnement (l’injection) Introduction Les interfaces qui doivent être injectées sont annotée avec l’annotation Inject Concepts n n Spring Io. C Possibilité d’annoter le constructeur ou bien les champs directement Google Guice n Conclusion Annotation respectant la JSR 299 depuis Guice 2. 1 public class Tweet. Client { private final Shortener shortener; private final Tweeter tweeter; @Inject public Tweet. Client(Shortener shortener, Tweeter tweeter) { this. shortener = shortener; this. tweeter = tweeter; } 24

Google Guice Principe de fonctionnement (l’injecteur) n Introduction Injecteur Guice pour charger le module

Google Guice Principe de fonctionnement (l’injecteur) n Introduction Injecteur Guice pour charger le module dans notre application Concepts Toutes dépendances et sous dépendances Spring Io. C n Google Guice résolues à partir du module Conclusion public static void main(String[] args) { Injector injector = Guice. create. Injector(new Tweet. Module()); Tweet. Client tweet. Client = injector. get. Instance(Tweet. Client. class); tweeter. publish. With. Url("message", "http: //tweeter. com"); } 25

Google Guice Avantages/Inconvénients Introduction n Les plus : Concepts u. Rapide Spring Io. C

Google Guice Avantages/Inconvénients Introduction n Les plus : Concepts u. Rapide Spring Io. C u. Facile d’utilisation Google Guice Conclusion n Les moins : u. Cas complexes non gérés u. Besoin de recompiler 26

Google Guice Démonstration Introduction Concepts Spring Io. C Google Guice Conclusion 27

Google Guice Démonstration Introduction Concepts Spring Io. C Google Guice Conclusion 27

Conclusion L’injection de dépendance Introduction Concepts Spring Io. C n Réduit le temps de

Conclusion L’injection de dépendance Introduction Concepts Spring Io. C n Réduit le temps de maintenance en cas de changement n Permet plusieurs configurations avec le même code n Permet l’utilisation de Mocks facilement n Facile à prendre en main Google Guice Conclusion 28

Conclusion Spring ou Guice ? Introduction Concepts n Frameworks très similaires n Spring reste

Conclusion Spring ou Guice ? Introduction Concepts n Frameworks très similaires n Spring reste très utilisé dont l’Io. C n Mais lourd et format compliqué n À utiliser avec le framework Spring n Sinon Guice très léger et plus agréable à utiliser Spring Io. C Google Guice Conclusion 29

Webographie n http: //www. springsource. com/ n http: //code. google. com/p/google-guice/ n http: //www.

Webographie n http: //www. springsource. com/ n http: //code. google. com/p/google-guice/ n http: //www. picocontainer. org/ n http: //excalibur. apache. org/ n http: //www. dotnetguru. org/articles/dossiers/ioc. htm n http: //martinfowler. com/articles/injection. html 30

Des questions ? 31

Des questions ? 31