Java Reference
In-Depth Information
3 . 6 Anwendung: Dependency Injection
In der Einleitung wurde erwähnt, dass Annotationen u. a. für Dependency Injection einge-
setzt werden können. Unter Dependency Injection versteht man, dass in einer Klasse ein
Attribut defi niert, dieses mit einer bestimmten Annotation versehen, aber diesem Attribut
kein Wert zugewiesen wird. Durch eine weitere So ware, die einen Ausführungsrahmen
(eine Art Basis-So ware, in der Regel auch Framework genannt) für die oben erwähnte
Klasse bildet, wird mittels Refl ection untersucht, welche Attribute der Klasse die gewisse
Annotation tragen. Diesen Attributen wird dann über Refl ection ein vom Framework und
vom Typ des Attributs abhängiger Wert zugewiesen. Diese Zuweisung von „außerhalb der
Klasse“, also durch das Framework, wird als Injektion bezeichnet. Mit Dependency (Abhän-
gigkeit) wird darauf Bezug genommen, dass ein Objekt a von einem anderen Objekt b
abhängig ist, wenn a eine Referenz auf b hat. Dependency Injection könnte man also über-
setzen durch das Zuweisen von Werten an Attribute durch eine Art von Framework-So -
ware. Häufi g spricht man in diesem Zusammenhang auch von der „Verdrahtung“ von
Objekten.
Bevor wir uns den Code, der die Dependcy Injection realisiert, ansehen, wird zunächst erlä u-
tert, was diese So ware leisten soll. Zunächst einmal defi nieren wir die Annotation @Inject
(s. Listing 3.3):
Listing 3.3 Deklaration der Annotation @Inject
package javacomp.basics;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Inject
{
}
Unser Dependency-Injection-Programm erwartet als Kommandozeilenargumente die Namen
von beliebig vielen Klassen. Es erzeugt zunächst zu jeder der angegebenen Klassen ein
Objekt. Es wird davon ausgegangen, dass zu diesem Zweck jede Klasse einen parameterlosen
Konstruktor hat. Ist dies nicht der Fall, so kann kein Objekt erzeugt werden und die betref-
fende Klasse wird im weiteren Verlauf nicht mehr berücksichtigt. Dann werden für die
Klasse jedes so erzeugten Objekts alle Attribute untersucht. Falls ein Attribut die Annotation
@Inject trägt und ihr Datentyp eines der angegebenen Kommandozeilenargumente ist, wird
dem Attribut eine Referenz auf das zu dieser Klasse erzeugte Objekt zugewiesen (falls die
Erzeugung möglich war). Welche Sichtbarkeit die Attribute haben, spielt dabei keine Rolle,
da eventuell vorhandene Sichtbarkeitseinschränkungen durch setAccessible(true) aufgeho-
ben werden. Zusammengefasst heißt das, dass unser Dependency-Injection-Beispielpro-
gramm je ein Objekt jeder angegebenen Klasse erzeugt, die dann entsprechend der Annota-
tion @Inject „verdrahtet“ werden.
 
Search WWH ::




Custom Search