Java Reference
In-Depth Information
Dependency Injection bedeutet, dass eine Verknüpfung zwi-
schen Objekten zur Laufzeit von einer eigenen Instanz ( Injektor )
hergestellt wird und nicht zur Kompilierzeit.
Vorteile von Dependency Injection
Durch Dependency Injection wird eine Klasse unabhängig von anderen Klassen und
braucht auch kein Wissen darüber, wie Objekte solcher Klassen zu erzeugen sind.
Wenn Klassen keine Abhängigkeiten zu anderen Klassen haben, sind sie als isolierte
Elemente auch am einfachsten zu testen. Man kann eine Klasse also isolieren, wenn
ihre Objekte keine Objekte von anderen Klassen zu erzeugen brauchen, sondern
ihnen Referenzen auf die benötigten Objekte zur Laufzeit mittels Dependency Injection
übergeben werden.
Realisierungsformen der Dependency Injection
Üblicherweise erzeugt in objektorientierten Systemen ein Objekt die von ihm benötig-
ten Objekte selbst. Dadurch besitzt es auch eine Referenz auf das jeweilige erzeugte
Objekt. Bei Dependency Injection überträgt man die Aufgabe für das Erzeugen und für
das Verknüpfen von Objekten an eine eigene Instanz wie etwa ein Framework.
Für Dependency Injection gibt es nach [fowioc] folgende drei
Möglichkeiten:
x Es können Abhängigkeiten zu anderen Objekten direkt bei der
Erzeugung über einen Konstruktor mit Parametern erzeugt
werden ( Constructor Injection ).
x Es ist aber auch denkbar, dass diese erst später vom Injektor
über set-Methoden festgelegt werden ( Setter Injection ).
x Die dritte Technik ist, Interfaces zu definieren und für das Inji-
zieren zu verwenden ( Interface Injection ).
Während die ersten beiden Möglichkeiten - also Constructor Injection und Setter
Injection - offensichtlich sind, bedarf die Vorgehensweise mittels Interface Injection ei-
ner ausführlichen Betrachtung.
Bei Interface Injection wird zusätzlich zu der Abstraktion für die zu injizierenden Ob-
jekte ( IAbstraktion ) noch ein weiteres Interface ( IInjectAbstraktion ) für die
Injektion dieser Objekte vorgegeben, siehe Bild 1-17. Die Klasse eines Objekts, in das
eine Verbindung injiziert werden soll, muss das Interface IInjectAbstraktion im-
plementieren. Das Interface IInjectAbstraktion definiert eine Methode in-
ject() , die von einem Injektor zur Laufzeit aufgerufen werden kann, um die Verbin-
dung von einem Objekt der implementierenden Klasse - also der Klasse Abhängige-
Klasse - zu einem Objekt einer konkreten zu injizierenden Klasse herzustellen. Das
folgende Bild zeigt die bei Interface Injection beteiligten Klassen und Interfaces, aller-
dings der Einfachheit halber ohne einen Injektor und nur mit einer einzigen konkreten
zu injizierenden Klasse:
Search WWH ::




Custom Search