injection de dependance en java
DESCRIPTION
Injection de dependanceTRANSCRIPT
Stop writing newInjection de dépendance
(Dependency Injection)
Tuesday, July 9, 13
Object Service
Module Framework
API
Tuesday, July 9, 13
Object Service
Module Framework
APIComponent
Tuesday, July 9, 13
Component assembly 1: “Old style”
public class MyFirstComponent {
private MySecondComponent component; public MyFirstComponent() { component = new MySecondComponent(param1, param2, param3, ...); }
}
Tuesday, July 9, 13
Component assembly 2 : Factory
public class MyFirstComponent {
private MySecondComponent component; public MyFirstComponent() { component = MyFactory.newMySecondComponent(); }
}
Tuesday, July 9, 13
Component assembly 3: Service Locator
public class MyFirstComponent {
private MySecondComponent component; public MyFirstComponent() { component = (MySecondComponent) InitialContext.lookup(“comp/MySecondComponent”); }
}
Tuesday, July 9, 13
Component assembly 5: Dependency Injection (setter)
public class MyFirstComponent {
private MySecondComponent component;
public MyFirstComponent() { }
public void setComponent(MySecondComponent component){this.component = component;
}
}
Tuesday, July 9, 13
Component assembly 6: Dependency Injection
(annotation)
public class MyFirstComponent {
private final MySecondComponent component;
@Injectpublic MyFirstComponent(MySecondComponent component) {
this.component = component; }
}
Tuesday, July 9, 13
Pourquoi DI ?
• Séparation des préoccupations (SoC : separation of concerns)
• Encourage le design orienté composant
• Facile à tester
• Simplifie la maintenance
• Moins de lignes de code
Tuesday, July 9, 13
Frameworks
• Spring
• Java EE >5 + EJB3
• JBoss Seam
• Google Guice
Tuesday, July 9, 13
Spring framework
• Très utilisé
• Indépendant de Java EE
• Excellente documentation
• Simple unit-testing
• Facile de faire des erreurs graves
Tuesday, July 9, 13
Google Guice
• Ultra légé - ultra dynamique
• Facile d’apprentissage
• Utilisé dans Google AdWords!
Tuesday, July 9, 13
DEMOpublic class GuiceMain {
public static void main(String[] args) { Injector inject = Guice.createInjector(new AbstractModule() {
@Override protected void configure() { //bind(ProgramOutput.class).to(ConsoleOutput.class); //bind(ProgramOutput.class).to(FileOutput.class); } }); Logic myLogic = inject.getInstance(Logic.class); myLogic.run(); }} ...
Tuesday, July 9, 13