Contexts and Dependency Injection
# Contexts and Dependency Injection

Contexts and Dependency Injection (CDI) – auch bekannt als Web Beans – ist ein Java-Standard, welcher die Konfiguration von Modulen abhängig von verschiedenen Zusammenhängen durch Injektion von Abhängigkeiten erlaubt. Diese externe Konfiguration von Abhängigkeiten wurde im Java-Kontext zuerst im Spring-Framework umgesetzt; die Idee eines ganzheitlichen Abhängigkeitsmanagements im Java-Enterprise-Stack stammt aus dem Open-Source-Framework JBoss Seam; sie wurde 2006–2009 als JSR 299 formalisiert und 2009 in den Standard Java Enterprise 6 aufgenommen.
CDI standardisiert das Prinzip der Dependency Injection für Java, wonach die von einem Modul verwendeten Abhängigkeiten von außen dem Modul bekannt gemacht werden und im Modul lediglich als Abhängigkeit – Interface oder Klasse, jedenfalls keine konkrete Objektinstanz – definiert sind. Abhängig vom Kontext (beispielsweise in einer Standalone-Anwendung oder als Enterprise-Bean in einem Anwendungsserver, aber auch im Modultest oder Integrationstest) können diese Abhängigkeiten verschieden gesetzt werden.
Die CDI-Spezifikation sieht dabei durch die Definition von Lebenszyklen (Zustands-Übergangs-Modellen) für Java-Objekte, die Integration mit JavaServer Pages und JavaServer Faces via Expression Language, die Dekoration und Interzeption von Objekten und ein Ereignis-Benachrichtigungs-Modell weitgehende Modularisierung vor. Durch eine entsprechende Service-Schnittstelle (SPI) kann CDI modular erweitert werden.