Spezifikation / Library-APICore2.0
Jakarta Dependency Injection
Gemeinsame Basisannotation für Dependency Injection, z. B. @Inject und Qualifier-Konzepte.
Einordnung
Spezifikation / Library-API
Enterprise-Rolle
Diese kleine Spezifikation sorgt für gemeinsame DI-Semantik über Frameworks hinweg.
Fachliches Verständnis
Diese kleine Spezifikation sorgt für gemeinsame DI-Semantik über Frameworks hinweg. In der Praxis ist wichtig, die Spezifikation nicht mit der konkreten Runtime zu verwechseln. Der Standard beschreibt die portablen APIs, die Implementierung entscheidet über Konfiguration, Performance, Betrieb und Support.
Kernkonzepte
- @Inject für Konstruktor, Feld oder Methode.
- @Qualifier zur Auflösung mehrerer Implementierungen.
- @Singleton als Basiskonzept.
Typische Einsatzfälle
- Framework-übergreifende DI-Basis verstehen.
- Portablen Code zwischen CDI und anderen DI-Containern strukturieren.
Technisches Beispiel
java
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, PARAMETER, METHOD, TYPE})
public @interface PrimaryPaymentProvider {}
@ApplicationScoped
@PrimaryPaymentProvider
class CardPaymentGateway implements PaymentGateway {
public PaymentResult authorize(Money amount) { return PaymentResult.accepted(); }
}
@ApplicationScoped
class PaymentService {
private final PaymentGateway gateway;
@Inject
PaymentService(@PrimaryPaymentProvider PaymentGateway gateway) {
this.gateway = gateway;
}
}
Architekturregel: Jakarta APIs gehören an Systemgrenzen und Infrastrukturpunkte. Fachentscheidungen bleiben in Application Services und Domain-Modellen testbar und möglichst unabhängig vom Container.
Enterprise-Fallen
- Field Injection als Standard etablieren.
- DI als Service Locator missbrauchen.
Legacy-Modernisierung
Alte JNDI-Lookups werden durch Injection ersetzt.
Vertiefung: Review-Fragen für Senior-Entwickler
- Welche Spezifikation ist hier wirklich nötig?
- Welche Runtime-Funktion wird genutzt und ist sie portabel?
- Wo liegt die Transaktionsgrenze?
- Sind API-Verträge, DTOs und Domain-Modelle getrennt?
- Ist der Code ohne Application Server testbar?