4. Component assembly 1:
“Old style”
public class MyFirstComponent {
}
Tuesday, July 9, 13
private MySecondComponent component;
public MyFirstComponent() {
component = new MySecondComponent(param1, param2, param3, ...);
}
5. Component assembly 2 :
Factory
public class MyFirstComponent {
}
Tuesday, July 9, 13
private MySecondComponent component;
public MyFirstComponent() {
component = MyFactory.newMySecondComponent();
}
6. Component assembly 3:
Service Locator
public class MyFirstComponent {
private MySecondComponent component;
public MyFirstComponent() {
component = (MySecondComponent) InitialContext.lookup(“comp/
MySecondComponent”);
}
}
Tuesday, July 9, 13
7. 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
8. Component assembly 6:
Dependency Injection
(annotation)
public class MyFirstComponent {
private final MySecondComponent component;
}
Tuesday, July 9, 13
@Inject
public MyFirstComponent(MySecondComponent component) {
this.component = component;
}
9. 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
11. 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
12. Google Guice
• Ultra légé - ultra dynamique
• Facile d’apprentissage
• Utilisé dans Google AdWords!
Tuesday, July 9, 13
13. DEMO
public 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