Dependency Injection
Dependency Injection (DI) bedeutet: nicht du erstellst deine Abhängigkeiten — der Container gibt sie dir.
I. Beispiel
@WebServlet("/hallo")
public class HelloServlet extends HttpServlet {
@EJB // Container füllt das Feld
private HelloBean helloBean; // kein "new" nötig!
}
II. Warum DI?
- Container managt Lifecycle (Pool, Singleton, ...)
- Du kannst Implementierung leicht austauschen
- Automatische Transaktionen via Container-Proxy
III. Annotationen für DI
| Annotation | Quelle | Für |
|---|---|---|
| @EJB | EJB-Spec | EJBs |
| @Inject | CDI | Alle Beans |
| @PersistenceContext | JPA | EntityManager |
@Resource |
Java EE | Datasource, Mail, ... |
.NET-Vergleich
Constructor-DI mit services.AddX<>() in Program.cs. Hier ist die Annotation die Registrierung.