injection de dependance en java

13
Stop writing new Injection de dépendance (Dependency Injection) Tuesday, July 9, 13

Upload: xavier-carpentier

Post on 08-Jul-2015

109 views

Category:

Technology


2 download

DESCRIPTION

Injection de dependance

TRANSCRIPT

Page 1: Injection de dependance en Java

Stop writing newInjection de dépendance

(Dependency Injection)

Tuesday, July 9, 13

Page 2: Injection de dependance en Java

Object Service

Module Framework

API

Tuesday, July 9, 13

Page 3: Injection de dependance en Java

Object Service

Module Framework

APIComponent

Tuesday, July 9, 13

Page 4: Injection de dependance en Java

Component assembly 1: “Old style”

public class MyFirstComponent {

private MySecondComponent component; public MyFirstComponent() { component = new MySecondComponent(param1, param2, param3, ...); }

}

Tuesday, July 9, 13

Page 5: Injection de dependance en Java

Component assembly 2 : Factory

public class MyFirstComponent {

private MySecondComponent component; public MyFirstComponent() { component = MyFactory.newMySecondComponent(); }

}

Tuesday, July 9, 13

Page 6: Injection de dependance en Java

Component assembly 3: Service Locator

public class MyFirstComponent {

private MySecondComponent component; public MyFirstComponent() { component = (MySecondComponent) InitialContext.lookup(“comp/MySecondComponent”); }

}

Tuesday, July 9, 13

Page 7: Injection de dependance en Java

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

Page 8: Injection de dependance en Java

Component assembly 6: Dependency Injection

(annotation)

public class MyFirstComponent {

private final MySecondComponent component;

@Injectpublic MyFirstComponent(MySecondComponent component) {

this.component = component; }

}

Tuesday, July 9, 13

Page 9: Injection de dependance en Java

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

Page 10: Injection de dependance en Java

Frameworks

• Spring

• Java EE >5 + EJB3

• JBoss Seam

• Google Guice

Tuesday, July 9, 13

Page 11: Injection de dependance en Java

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

Page 12: Injection de dependance en Java

Google Guice

• Ultra légé - ultra dynamique

• Facile d’apprentissage

• Utilisé dans Google AdWords!

Tuesday, July 9, 13

Page 13: Injection de dependance en Java

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