Das Folgende ist mein Pointcut und rate Deklaration
%Vor%Ich bekomme den folgenden Fehler
%Vor%Ich stecke hier fest, irgendwelche Zeiger
Sie vermissen den Rückgabetyp:
%Vor%und Sie müssen die Argumentnamen binden, etwa so:
%Vor%Service-Schnittstelle:
%Vor%Implementierungsklasse:
%Vor%Spring AOP-Aspekt:
%Vor%Spring Context XML:
%Vor%Hauptklasse zum Testen:
Hier ist eine Hauptmethode, um den gesamten Prozess zu testen. Es startet einen Spring ApplicationContext ohne XML-Konfiguration , wobei das obige XML die Service-Bean und den Aspekt definiert (es stellt sich heraus, dass die Lösung ohne XML nur funktionierte, weil ich AspectJ Weben angeschaltet hatte, weiß ich nicht) Welche Beans muss ich einschließen, um aspectj-autoproxy zu aktivieren, also verwende ich jetzt ClassPathXmlApplicationContext
mit diesem minimalen XML-Code:
Ausgabe:
%Vor%Damit sollten Sie beginnen. Grundsätzlich gilt: Sie müssen sicherstellen, dass die Methoden, die Sie abfangen, von einer Service-Schnittstelle unterstützt werden, wenn Sie JDK-Proxys verwenden (Spring-Standard). Lesen Sie hier Spring AOP Proxy-Mechanismen .
Hinweis:
Wie Sie sehen, binde ich die Methodenargumente an den Aspekt, nicht an den Pointcut, wodurch der Pointcut für Methoden mit unterschiedlichen Argumentsignaturen wiederverwendbar wird. Es wäre aber auch möglich, sie im Pointcut zu binden:
%Vor%Sie sollten so schreiben
%Vor% Achten Sie auf "... (* backend..."
*
und sollte ein Leerzeichen verwendet werden.
Beachten Sie, dass Sie ein ähnliches Verhalten mit der @Before
-Anmerkung in org.aspectj.lang.annotation.Before
haben.
Sie können den Ausdruck ohne Ausführung Schlüsselwort und ohne Rückgabetyp verwenden:
%Vor%oder mit beiden:
%Vor% Sie können jedoch das Schlüsselwort execution
nicht verwenden, ohne den Rückgabetyp zu verwenden.
Tags und Links java spring aspectj aop spring-aop