© Excellent backgrounds/Shutterstock.com
Ein Segen für Java-Entwickler?

Dependency Injection mit Boon


Mit Boon DI widmen wir uns nach Dagger (siehe S. 60) einem weiteren Vertreter der Gattung Dependency-Injection-Frameworks. Das Projekt selbst stellt einige weitere Module/Packages bereit, auf die wir im Weiteren nicht eingehen werden. Hier werden wir uns lediglich die DI-Eigenschaften ansehen.

In der Einleitung zu Boon DI kann man lesen, dass es Dagger ähnlich sein soll, aber auf den erweiterten Compile-Prozess verzichtet. Ebenfalls werden einige Qualifier angeboten, die namentlich denen aus den Frameworks Spring, Seam, Guice und „plain“ CDI (Contexts and Dependency Injection) gleichen. Eine Besonderheit vorweg: Es gibt den Qualifier @Inject einmal im Package org.boon.di; bei der Verwendung kann man allerdings auch auf javax.inject.Inject zurückgreifen. Die gemischte Verwendung ist ebenfalls möglich.

Erzeugungsreihenfolge

Bei der Verwendung von DI-Frameworks ist es von Interesse, die Reihenfolge der Instanziierungen zu kennen. Um dies zu ermitteln, verwende ich folgende Hilfsklasse: PrintInfo (Listing 1).

Listing 1

public class PrintInfo { public static void printInfo(Class aClass){ final Method[] declaredMethods = aClass.getDeclaredMethods(); String txt = ""; for (final Method declaredMethod : declaredMethods) { txt = txt + " - " + declaredMethod.getName(); } System.out.println(aClass.getSimpleName() + " -> " + txt); } }

Das erste Beispiel ist nun eine einfache Instanziierung. Hier wird ein Service mit einem Attribut vom Typ SubService per @Inject versorgt (Listing 2).

Listing 2

public class MainStep001 { public static void main(String[] args) { final Service service = new Service(); service.printInfo();  // CDI not working final Module module = DependencyInjection.classes(Service.class); final Service service1 = module.get(Service.class); service1.printInfo();  // factory Methods are now available final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); service2.printInfo(); } } public class Service { @Inject SubService subService; public void printInfo(){ PrintInfo.printInfo(this.getClass()); if(subService == null){ System.out.println("subService = " + subService); } else{ subService.printInfo(); } } @PostConstruct public void printInfoPostconstruct(){ System.out.println("printInfoPostconstruct() " + this.getClass().getSimpleName()); } } public class SubService { public void printInfo(){ PrintInfo.printInfo(this.getClass()); } @PostConstruct public void printInfoPostconstruct(){ System.out.pr...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang