====== LU09b - IoC (Inversion of Control) & DI (Dependency Injection) ======
Beim Prinzip IoC geht es darum, einem Framework o. Ä. von Aussen Teile des eigenen Codes zu kontrollieren.
Es gibt verschiedene Entwurfsmuster, die dafür geeignet sind. Unter anderem:
* Strategie-Entwurfsmuster (Strategy design pattern)
* Service-Locator (Service locator)
* Fabrikmethode (Factory method)
* Dependency Injection
Bei Dependency Injection wird die Initialisierung eines Objekts nicht im abhängigen Objekt sondern zum Beispiel mittels zentralen Konfiguration ausgelagert.
Spring Boot erlaubt folgende Arten von Injection für Beans-Klassen (@Component, @Service, @Repository, @Controller, ...)
==== Field Injection ====
public class ProjectApiController implements ProjectApi {
@Autowired
private final JwtUtil jwtUtil;
...
}
Anmerkungen:
* Mühsamer zu testen
* Felder können nicht zugleich ''final'' sein
==== Constructor Injection ====
public class ProjectApiController implements ProjectApi {
private final JwtUtil jwtUtil;
@Autowired
public ProjectApiController(JwtUtil jwtUtil) {
this.jwtUtil = jwtUtil;
}
...
}
Anmerkungen:
* ''@Autowired'' ist optional, sofern es nur einen Konstruktor gibt.
==== Setter Injection ====
public class ProjectApiController implements ProjectApi {
@Autowired
private final JwtUtil jwtUtil;
...
}
Anmerkungen:
* Falls das Feld veränderbar oder optional ist