Java: CDI 2.0 ist nun offiziell fertig

Die JCP Expert Group hat die Spezifikation für Context and Dependency Injection abgesegnet. CDI ist ein wichtiger Bestandteil für Java EE, aber in Version 2.0 auch auf Java SE ausgerichtet.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Java: CDI 2.0 ist nun offizieller fertig
Lesezeit: 3 Min.

Während die einstweilige Ablehnung des aktuellen Stands des Java Platform Module System (JPMS) aka Jigsaw, das ein zentraler Bestandteil von Java 9 ist, die Java-Welt verunsichert, hat eine vor allem für Java EE wichtige Spezifikation nun den Segen der zugehörigen JCP Expert Group erhalten: CDI 2.0 (Context and Dependency Injection) ist nun offizieller Java-Standard.

Eine wesentliche Neuerung der als JSR 365 (Java Specification Request) geführten Spezifikation ist ebenfalls die Modularisierung, allerdings nicht des Systems, sondern der Spezifikation selbst. Damit tragen die Macher der Tatsache Rechnung, dass CDI bisher vor allem für den Einsatz in Java-EE-Anwendungen ausgelegt war, nun aber ausdrücklich auch für Java SE passt. Bisherige CDI-Implementierungen unterstützten zwar bereits den Einsatz, aber die alten Spezifikationen hatten die Java-EE-Plattform sogar im Namen.

Nun ist die Spezifikation unterteilt in "Core CDI", das die Kernspezifikation enthält, "CDI in Java SE" mit Regeln für die Standard Edition sowie "CDI in Java EE" mit zusätzlichen Funktionen und Regeln für die Enterprise Edition von Java. Der erste Punkt enthält die wesentliche Basis und grundlegende Konezpte wie Qualifier, Scopes, Dependency Injection, Interceptors und Events. Die EJB-Spezifikation haben die Macher in den letzten Part ausgelagert, während der SE-Bereich unter anderem die API zum Bootstrapping von CDI-Containern in Java SE über die abstrakte SeContainerInitializer-Klasse und deren statische newInstance()-Methode enthält.

Eine wichtige technische Neuerung ist das erweiterte Event-System. Ereignisse lassen sich neuerdings nicht mehr nur synchron, sondern auch asynchron verarbeiten. Außerdem ist es möglich, einzelne Observer zu deaktivieren und ihre Reihenfolge über die @Priority-Annotation zu sortieren.

Ebenfalls neu sind die Annotation Literals, die statische Klassen darstellen und eine Instaziierung zahlreicher CDI-Annotationen, darunter javax.enterprise.inject.Any, javax.enterprise.inject.Default sowie der Scope-Annotationen javax.enterprise.inject.RequestScoped, javax.enterprise.context.SessionScoped und javax.enterprise.context.ApplicationScoped beispielsweise folgendermaßen ermöglicht:

Default defaultLiteral = new Default.Literal();

Außerdem haben die Macher CDI 2.0 an die Java-8-Features angepasst – also den derzeitigen Java-SE-Standard, nicht das für Juli geplante Java EE 8. So berücksichtigt die Spezifikation unter anderem Streams und Lambdas. Außerdem erweitern die Repeated Qualifier das Konzept der CDI Qualifier, indem sie durch die Repeatable Annotations aus Java 8 eine mehrfache Zuweisung ermöglichen.

Die vollständige Spezifikation lässt sich ebenso auf der Seite der CDI-Spec herunterladen wie eine Referenzimplementierung und ein passendes TCK (Technology Compatibility Kit). (rme)