Java-Kontexte und Abhängigkeitsinjektion mit JAX-RS verwenden
JAX-RS-Stammressourcen (Java™ API for RESTful Web Services) und -Provider können in einem Webarchiv (WAR-Datei) verwendet werden, das Java Contexts and Dependency Injection (JCDI) unterstützt. Fügen Sie Ihrer WAR-Datei einfach eine gültige Datei WEB-INF/beans.xml hinzu, und alle JAX-RS-Stammressourcen und -Provider, die gültige JCDI-Beans sind, können JCDI-Funktionen verwenden.
Informationen zu diesem Vorgang
JAX-RS-Klassen in einem Archiv mit JCDI-Unterstützung können mit @javax.inject.Inject annotierte Injektionspunkte haben, an JCDI-Lebenszyklusbereichen teilhaben, JCDI-Ereignisse auslösen und Methodeninterceptor und -dekoratoren haben.
JAX-RS-Stammressourcen- und JAX-RS-Providerklassen müssen einen gültigen von JCDI-MBean-Konstruktor haben. Wenn Ihre Klassen einen Konstruktor haben, der einen Parameter hat, der mit der Annotation @javax.ws.rs.core.Context oder mit einer beliebigen JAX-RS-Parameterannotation wie @javax.ws.rs.QueryParam annotiert ist, müssen Sie Ihren Code im Allgemeinen refaktorieren, damit er stattdessen JAX-RS-annotierte Beaneigenschaften oder -felder verwendet. Sie können eine mit @javax.annotation.PostConstruct annotierte Methode hinzufügen, um Ihr Objekt zu erstellen.
Außerdem müssen JAX-RS-Stammressourcen- und -Providerklassen einen in JCDI spezifizierten Geltungsbereich haben. Geltungsbereiche oder Bereiche steuern den Lebenszyklus einer JCDI-MBean. Stammressourcenklassen können einen beliebigen gültigen Geltungsbereich wie @javax.enterprise.context.RequestScoped haben, der bewirkt, dass sich die JAX-RS-Stammressourcenklasse genauso wie in einer Anwendung ohne JCDI-Unterstützung verhält. Die javax.ws.rs.core.Application-Unterklassen und JAX-RS-Provider müssen die Annotation @javax.enterprise.context.ApplicationScoped haben.
Sie können JCDI verwenden, um Ihre Anwendung schneller und einfacher zu entwickeln und um die Testfähigkeit Ihres Codes zu verbessern. JCDI unterstützt moderne Programmiertechniken wie Abhängigkeitsinjektion, ein ereignisgesteuertes Programmiermodell und ein aspektorientierteres Konzept hinsichtlich Cross-Cutting Concerns. Entwickler können aspektorientierte Programmierung verwenden, um Funktionen, die nicht zur Kerngeschäftslogik einer Methode gehören, ordnungsgemäß hinzuzufügen. Ein Cross-Cutting Concern ist beispielsweise die Protokollierung. Einige Entwickler müssen den Einstieg und den Ausstieg jedesmal protokollieren, wenn eine bestimmte Geschäftsmethode in einer Anwendung aufgerufen wird. Entwickler können jetzt JCDI-Funktionen wie Methodeninterceptor und -dekoratoren verwenden, um diese Funktionen ordnungsgemäß hinzuzufügen. Entwickler können Abhängigkeitsinjektion verwenden, um während Komponententests ohne großen Aufwand eigene Pseudoimplementierungen einzufügen. Die Entkopplung zuvor fest codierter Abhängigkeiten ermöglicht Entwicklern die Durchführung einfacherer Tests einzelner Komponenten.
JCDI-Beans können Enterprise JavaBeans (EJBs) injizieren und @javax.annotation.Resource-Injektionen verwenden, um Java-EE-Ressourcen (Java Platform, Enterprise Edition) zu injizieren. EJBs können auch JCDI-Beans sein. EJBs mit Annotationen wie @javax.ejb.Stateless können auch die JCDI-Abhängigkeitsinjektion und weitere JCDI-Features verwenden. Die EJBs behalten ihre transaktionsorientierten und anderen EJB-Features.
Java Contexts and Dependency Injection (JCDI) ist ein neues Feature von Java Platform, Enterprise Edition (Java EE) 6. JCDI kann das Programmiermodell ändern, um die Entwicklung von Anwendungen zu vereinfachen und gleichzeitig die Wartbarkeit der Anwendungen zu erhöhen. JAX-RS-Entwickler können JCDI-Features wie die @javax.inject.Inject-Unterstützung in Stammressourcen- und Providerklassen verwenden.
Vorgehensweise
Ergebnisse
Sie haben eine Enterprise-Bean so aktiviert, dass JAX-RS-Ressourcen mit JCDI-Funktionalität zur Verfügung gestellt werden.