Einführung in Interzeptoren in Java EE
- Einführung in die Interceptors in Java EE
-
das
javax.interceptor
-Paket in Java - die Interceptor-Methode in Java
- Verwendung von Interceptor-Methoden und Interceptor-Klassen in Java
In diesem Artikel werden wir eine Einführung in die Interceptors in Java EE geben. Es umfasst Interceptor-Methoden, Interceptor-Klassen und Lebenszyklus-Callback-Interceptoren.
Einführung in die Interceptors in Java EE
In Java EE Version 5 konnten wir Interceptors nur auf Enterprise JavaBeans (EJBs
) verwenden. Während die Java EE Version 6 neue Spezifikationen brachte, konnten wir diese generischer anwenden, weil sie auf einer höheren Ebene abstrahiert wurde.
In Java EE Version 7 wurde die Annotation @Transactional
eingeführt, die Container-verwaltete Transaktionen aus den Enterprise JavaBeans heraus ermöglicht. Es wird als Interceptor-Bindung definiert und von der Java-EE-Laufzeitumgebung implementiert.
Der Interceptor ist die Klasse, deren Methoden aufgerufen werden, wenn eine Geschäftsmethode auf dem Ziel aufgerufen wird. Zum Beispiel treten Lebenszyklusereignisse wie jene Methoden auf, die eine Bean zerstören oder erstellen.
Zur Umsetzung der Querschnittsthemen setzen wir Abfangjäger ein. Zum Beispiel Sicherheit, Auditing und Protokollierung von der Geschäftslogik.
Wir können Abfangjäger als Klassenabfangjäger oder Methodenabfangjäger definieren, und der bevorzugte Ansatz besteht darin, Metadatenanmerkungen zu verwenden, um einen Abfangjäger zu definieren. Wir können sie auch in einem Anwendungsdeskriptor definieren, aber sie wären nicht über Java-EE-Server hinweg portierbar.
das javax.interceptor
-Paket in Java
Die Metadatenanmerkungen befinden sich im Paket javax.interceptor
. Einige Beispiele für Metadaten-Anmerkungen sind @AroundTimeout
und @AroundInvoke
.
Das Paket javax.interceptor
enthält alle Schnittstellen und Anmerkungen, die wir verwenden, um die Interceptor-Klassen und -Methoden zu definieren, und wird auch zum Binden einer Interceptor-Klasse an die Zielklasse verwendet. Die Funktionalität eines Interceptors ist in den Java Interceptor Specifications definiert.
Die Spezifikationen der Interceptors definieren zwei Arten von Interception Points: Lifecycle Callback Interception und Business Method Interception. Die Kontext- und Abhängigkeitsinjektion (CDI
) verbessert diese Funktionalität und verbessert mit einem semantischen und annotationsbasierten Ansatz zum Binden der Interzeptoren an Beans.
die Interceptor-Methode in Java
Es ist eine Methode der Zielklasse oder einer Interceptor-Klasse. Wird aufgerufen, um den Aufruf der Methode der Zielklasse und auch den Konstruktor und das Lebenszyklusereignis der Zielklasse usw. einzufügen.
Für eine Zielklasse können wir die Interceptor-Methode in der Zielklasse, Interceptor-Klasse oder in der Oberklasse der Interceptor-Klasse oder Zielklasse deklarieren. Das AroundConstruct
ist die einzige Methode, die wir in der Interceptor-Klasse oder ihrer Oberklasse definieren können.
Die Methoden AroundInvoke
, AroundTimeout
, PostConstruct
und PreDestroy
sind ebenfalls die Interceptor-Methoden. Während PostConstruct
, AroundConstruct
und PreDestroy
gemeinsam als Lifecycle-Callback-Interceptor-Methoden bezeichnet werden.
Interceptor-Klassen
Die Interceptor-Klasse unterscheidet sich von der Zielklasse. Die Methoden der Interceptor-Klasse werden als Reaktion auf Aufrufe einer Zielklasse aufgerufen, und eine Zielklasse kann einer beliebigen Anzahl von Interceptor-Klassen zugeordnet werden.
Denken Sie daran, dass die Interceptor-Klasse einen öffentlichen Konstruktor ohne Argumente enthalten muss. Für eine Klasse verwenden wir Metadatenannotationen, um Interceptor-Klassen und -Methoden zu definieren, und wir können auch Deployment-Deskriptoren verwenden, um Interceptor-Klassen/-Methoden zu definieren.
Die Interceptor-Klassen werden in der Reihenfolge aufgerufen, in der sie in der Annotation javax.interceptor.Interceptors
definiert wurden. Denken Sie daran, dass diese Reihenfolge nicht festgelegt ist und vom Implementierungsdeskriptor außer Kraft gesetzt werden kann.
Interceptor-Lebenszyklus
Der Lebenszyklus von Interceptor-Klassen ist derselbe wie der ihrer zugehörigen Zielklassen. Wenn wir die Zielklasse instanziieren, wird auch die Interceptor-Klasse instanziiert, und wir tun dies für jede Interceptor-Klasse, die wir in einer Zielklasse deklarieren.
Wir instanziieren alle Interceptor- und Target-Klassen, bevor wir die @PostConstruct
-Callbacks aufrufen. Zerstören Sie außerdem die Instanzen der Interceptor-Zielklasse, bevor Sie @PreDestroy
-Callbacks aufrufen.
Verwendung von Interceptor-Methoden und Interceptor-Klassen in Java
Wir müssen sie nur wie folgt um unsere Methode legen, um Interceptor-Methoden zu verwenden. Wir nennen es die Intercept-Methode Interceptor.
@AroundTimeout public void timeoutInterceptorMethod(InvocationContext ctx){...}...
Für Interceptor-Klassen fügen wir Interceptor-Anmerkungen hinzu. Setzen Sie sie in unsere Interceptor-Klasse.
Siehe folgendes Beispiel.
Beispiel:
@Stateless
public class OrderBean {
... @Interceptors(OrderInterceptor.class) public void placeOrder(Order order){...}...
}
Sie können dies überprüfen, um Abfangjäger im Detail zu erkunden.