Einführung in Spring AOP

1. Einführung

In diesem Tutorial stellen wir Ihnen AOP (Aspect Oriented Programming) mit Spring vor und beginnen zu verstehen, wie wir dieses leistungsstarke Werkzeug in praktischen Szenarien einsetzen können.

Link:/aspectj[Anmerkungen von AspectJ]können auch bei der Entwicklung mit Spring AOP genutzt werden, aber in diesem Artikel konzentrieren wir uns auf die XML-basierte Konfiguration von Spring AOP.

2. Überblick

  • AOP ist ein Programmierparadigma, das die Modularität durch die Trennung von Querschnittsthemen erhöhen soll. ** Es wird dem vorhandenen Code zusätzliches Verhalten hinzugefügt, ohne den Code selbst zu ändern.

Stattdessen können wir diesen neuen Code und diese neuen Verhaltensweisen separat deklarieren.

Spring’s AOP-Framework hilft uns bei der Umsetzung dieser Querschnittsfragen.

3. Abhängigkeiten von Maven

Beginnen wir mit dem Hinzufügen der Spring-AOP-Bibliothekabhängigkeit in pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.RELEASE<version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
</dependencies>

Die neueste Version der Abhängigkeit kann überprüft werden: https://search.maven.org/classic/#search%7Cga%7C1%7C%20(g%3A%22org.springframework.boot%22%20AND%20a%3A% 22spring-boot-starter-parent% 22)% 20OR% 20% 20 (g% 3A% 22org.springframework.boot% 22% 20AND% 20a% 3Aa 22% 22spring-boot-starter% 22)% 20OR% 20% 20 ( g% 3A% 22org.springframework.boot% 22% 20AND% 20a% 3A% 22spring-boot-starter-aop% 22)[hier].

4. AOP-Konzepte und -Terminologie

Gehen wir kurz auf die AOP-spezifischen Konzepte und Terminologie ein:

4.1. Geschäftsgegenstand

Ein Geschäftsobjekt ist eine normale Klasse mit einer normalen Geschäftslogik.

Schauen wir uns ein einfaches Beispiel eines Business-Objekts an, bei dem wir einfach zwei Zahlen hinzufügen:

public class SampleAdder {
    public int add(int a, int b) {
        return a + b;
    }
}

Beachten Sie, dass diese Klasse eine normale Klasse mit Geschäftslogik und ohne Spring-bezogenen Anmerkungen ist.

4.2. Aspekt

Ein Aspekt ist die Modularisierung eines Unternehmens, das mehrere Klassen umfasst. Die vereinheitlichte Protokollierung kann ein Beispiel für ein derartiges Querschnittsthema sein.

Mal sehen, wie wir einen einfachen Aspekt definieren:

public class AdderAfterReturnAspect {
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public void afterReturn(Object returnValue) throws Throwable {
        logger.info("value return was {}",  returnValue);
    }
}

Im obigen Beispiel haben wir gerade eine einfache Java-Klasse definiert, die eine Methode namens afterReturn hat, die ein Argument vom Typ Object annimmt und diesen Wert nur protokolliert. Beachten Sie, dass auch unser AdderAfterReturnAspect eine Standardklasse ist, die keine Spring-Anmerkungen enthält.

In den nächsten Abschnitten erfahren Sie, wie wir diesen Aspekt mit unserem Geschäftsobjekt verbinden können.

4.3. Joinpoint

Ein Joinpoint ist ein Punkt während der Ausführung eines Programms, z. B. der Ausführung einer Methode oder der Behandlung einer Ausnahme. **

In Spring AOP repräsentiert ein JoinPoint immer eine Methodenausführung.

4.4. Punktschnitt

Ein Pointcut ist ein Vergleichselement, das hilft, ein Advice abzustimmen, das von einem Aspect an einem bestimmten JoinPoint angewendet werden soll.

Der Hinweis ist häufig mit einem Pointcut -Ausdruck verknüpft und wird an einem beliebigen Joinpoint ausgeführt, auf den der Pointcut passt.

4.5. Rat

Ein Rat ist eine Aktion, die von einem Aspekt an einem bestimmten Joinpoint ausgeführt wird.

Zu den verschiedenen Arten von Ratschlägen gehören "um", "vor" und "nach" Rat.

Im Frühjahr wird ein Advice als Abfangjäger modelliert, wobei eine Kette von Abfangjägern um den Joinpoint aufrechterhalten wird.

4.6. Verdrahtung Geschäftsobjekt und Aspekt

Schauen wir uns an, wie wir ein Business-Objekt mit einem Hinweis nach der Rückkehr an einen Aspekt anschließen können.

Nachfolgend finden Sie den Konfigurationsauszug, den wir in einer Spring-Standardkonfiguration im „<Beans>“ -Tag platziert haben:

<bean id="sampleAdder" class="org.baeldung.logger.SampleAdder"/>
<bean id="doAfterReturningAspect"
  class="org.baeldung.logger.AdderAfterReturnAspect"/>
<aop:config>
    <aop:aspect id="aspects" ref="doAfterReturningAspect">
       <aop:pointcut id="pointCutAfterReturning" expression=
         "execution(**  org.baeldung.logger.SampleAdder+.** (..))"/>
       <aop:after-returning method="afterReturn"
         returning="returnValue" pointcut-ref="pointCutAfterReturning"/>
    </aop:aspect>
</aop:config>

Wie zu sehen ist, haben wir ein einfaches Bean namens simpleAdder definiert, das eine Instanz eines Business-Objekts darstellt. Außerdem erstellen wir eine Instanz eines Aspekts mit dem Namen AdderAfterReturnAspect .

XML ist hier natürlich nicht die einzige Option. Wie bereits erwähnt, werden die AspectJ -Anmerkungen ebenfalls vollständig unterstützt.

4.7. Konfiguration auf einen Blick

Das Tag aop: config wird zur Definition der AOP-bezogenen Konfiguration verwendet. Innerhalb des config -Tags definieren wir die Klasse, die einen Aspekt darstellt. Wir haben ihm eine Referenz auf die "doAfterReturningAspect" -Aspekt-Bean gegeben, die wir erstellt haben.

Als Nächstes definieren wir einen Pointcut mit dem pointcut -Tag. Der im obigen Beispiel verwendete Pointcut ist execution ( org.baeldung.logger.SampleAdder +. (..)) . Dies bedeutet, dass ein Hinweis auf jede Methode in der Klasse SampleAdder angewendet wird, die eine beliebige Anzahl von Argumenten akzeptiert und einen Werttyp zurückgibt.

Als Nächstes definieren wir, welche Beratung wir anwenden möchten. In dem obigen Beispiel werden wir die Rückmeldungen nach der Rückkehr anwenden, die in unserem Aspect AdderAfterReturnAspect definiert sind, indem Sie die mit dem Attribut method definierte Methode namens afterReturn ausführen.

Dieser Hinweis in Aspect verwendet einen Parameter vom Typ Object. Der Parameter gibt uns die Möglichkeit, vor und/oder nach dem Aufruf der Zielmethode eine Aktion auszuführen. In diesem Fall protokollieren wir nur den Rückgabewert der Methode.

Spring AOP unterstützt mehrere Ratschläge mit Annotation-basierter Konfiguration. Dieses und weitere Beispiele finden Sie unter hier und hier .

5. Fazit

In diesem Lernprogramm wurden die in AOP verwendeten Konzepte und Beispiele für die Verwendung des AOP-Moduls von Spring veranschaulicht. Wenn Sie mehr über AOP erfahren möchten, finden Sie hier einige Ressourcen:

Anmerkung]** link:/spring-aop-pointcut-Tutorial[Eine Einführung in Pointcut

Ausdrücke im Frühling]** Vergleich von Spring AOP und AspectJ

  • link:/spring-aop-advice-tutorial[Einführung in die Beratungstypen in

Frühling]

Die Implementierung dieser Beispiele finden Sie unter https://github.com/eugenp/tutorials/tree/master/spring-aop (GitHub-Projekt). Dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren sein laufen wie es ist