© Excellent backgrounds/Shutterstock.com
Schnelle DI für Java und Android

Dependency Injection mit Dagger


Dagger ist ein quelloffenes Dependency-Injection-(DI-)Framework, das auf Guice basiert. Allerdings waren die Entwickler von Dagger nicht mit dem Grundprinzip von Guice zufrieden: Immer wieder hatten sie in größeren Projekten Unmengen an Binding-Code zu schreiben. Da dies aber Teil der statischen Semantik ist, verfolgen sie die Strategie, dieses Binding zu extrahieren und in Form von Quelltext abzulegen. Ein weiteres Entwurfsziel ist die gute Lesbarkeit und Unterstützung beim Debugging-Prozess. Im Folgenden werden wir uns Dagger genauer ansehen und die ersten Schritte mit dem Framework gehen. Wir beschäftigen uns hier mit Dagger ab der Version 1.2.

Eine der Besonderheiten von Dagger ist dessen Verfügbarkeit in Java- und Android-Systemen. Sehen wir uns ein einfaches Beispiel an und beginnen mit einem simplen @Inject einer Instanz (MainService) in unsere Main-Klasse (Listing 1).

Listing 1

public class Main { @Inject MainService mainService; / ... } public interface MainService { public String execute(String txt); } public class MainServiceImpl implements MainService { public String execute(String txt){ return "MainServiceImpl _ " + txt; } }

Der erste Schritt, um eine Instanz einer Klasse mit injizierten Attributen zu erhalten, ist die Verwendung des Objektgraphen. Der ObjectGraph ist die Repräsentation aller Abhängigkeiten, die für eine Instanziierung notwendig sind. Im folgenden Listing ist die Initialisierung und Anwendung von Dagger in der Klasse Main zu sehen (Listing 2).

Listing 2

? public class Main { @Inject MainService mainService; public static void main(String[] args) { // bootstrapping ObjectGraph objectGraph = ObjectGraph.create(new BusinessModule()); Main main = objectGraph.get(Main.class);  // Main main = new Main();  // objectGraph.inject(main); System.out.println("execute = " + main.mainService.execute("Und Los")); System.out.println("execute = " + main.mainService.execute("Und Los")); System.out.println("execute = " + main.mainService.execute("Und Los")); } }

Es gibt bei Dagger zwei Wege, um an eine Instanz einer Klasse zu gelangen, die injizierte Attribute enthält. Der eine Weg geht über die Methode get(..) der Klasse ObjectGraph und liefert direkt eine fertige Instanz. Der andere Weg geht über den expliziten Aufruf der Methode inject(..) und kann auf bestehende Instanzen angewendet werden. Damit kann man den Zeitpunkt zwischen der Erzeugung der haltenden Klasseninstanz und den Membern selbst kontrollieren.

Es gibt noch eine Kleinigkeit ...

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