Spring Dependency Injection - Satttoshi/github-wiki-generator GitHub Wiki
Dependency Injection
Dependency Injection ist ein Design Pattern, das die Abhängigkeiten von Objekten von der Erstellung auf die Konfigurationsebene verlagert. Dies kann durch die Nutzung von Annotationen wie @Repository, @Service, @Autowire oder @Component in der Java Programmierung erreicht werden.
@Repository
Die @Repository-Annotation ist eine Spring Framework-Spezifikation, die auf eine Datenzugriffsschicht in einer Anwendung hinweist. Sie ist normalerweise auf Klassen anwendbar, die im DAO (Data Access Object)-Muster implementiert sind und bietet den Mechanismus, um Daten aus einer Datenquelle abzurufen. Es ist dem ORM-Framework überlassen, präzise Informationen über Datenbankmanipulationen wie das Schreiben von Abfragen oder das Speichern von Objekten bereitzustellen.
@Repository
public class BeispielDAOImpl implements BeispielDAO {
//...
}
@Service
Die @Service-Annotation ist auch eine Spring Framework-Spezifikation. Die Annotation gibt an, dass die annotierte Klasse eine Service-Klasse ist, auf die über eine Spring-basierende Komponenten-Scan-Konfiguration zugegriffen wird. Diese Art von Klasse ist in der Regel im Bereich der Business-Logik der Anwendung oder im Bereich der Anwendungslogik platziert (wie z.B. Transaktionsverwaltung oder Email-Versand).
@Service
public class BeispielService {
//...
}
@Component
Die @Component-Annotation ist die generische Annotation, die verwendet wird, um jede Klasse zu markieren, die als Spring-Komponente fungieren soll. Andere spezifische Annotationen wie @Repository oder @Service leiten sich von @Component ab. Wenn keine andere spezifische Annotation verwendet wird, um eine Klasse zu markieren, wird sie als Spring-Komponente behandelt.
@Component
public class BeispielKomponente {
//...
}
@Autowire
Die @Autowire-Annotation ist eine Spring Framework-Spezifikation, mit der eine Dependency Injection für annotierte Felder, Methoden oder Konstruktoren durchgeführt wird. Die Annotation erleichtert das Schreiben von Komponententests und vereinfacht die Konfiguration von Spring-Anwendungen.
@Service
public class BeispielService {
@Autowired
private BeispielDAO beispielDAO;
//...
}
In diesem Beispiel wird die @Autowired-Annotation verwendet, um eine Instanz der Klasse BeispielDAO zu injizieren. Diese Feldinjektion stellt sicher, dass das DAO in den Service injiziert wird, um eine ordnungsgemäße Funktionsweise der Business-Logik sicherzustellen.
Zusammenfassung
Dependency Injection über @Repository, @Service, @Component, und @Autowire ist ein entscheidendes Konzept in der Java Programmierung, das zur Verbesserung der Testbarkeit, der Wartbarkeit und der Flexibilität von Anwendungen beiträgt. Zusammen bieten diese Annotationen eine einfache Möglichkeit zur Implementierung von Dependency Injection beim Entwickeln von Spring-basierten Java-Anwendungen.