Einführung in Interzeptoren in Java EE

Mehvish Ashiq 12 Oktober 2023
  1. Einführung in die Interceptors in Java EE
  2. das javax.interceptor-Paket in Java
  3. die Interceptor-Methode in Java
  4. Verwendung von Interceptor-Methoden und Interceptor-Klassen in Java
Einführung in Interzeptoren in Java EE

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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook