Alles, was ich herausfinden wollte, war "alle Klassen / Methoden in Spring -Bohnen, die mit @Versioned kommentiert sind" .
Ich habe meine benutzerdefinierte Annotation als
erstellt %Vor%Diese Annotation funktioniert perfekt , wenn ich Java-Reflektion verwende, um Methoden wie folgt zu finden:
%Vor%Aber es funktioniert nicht, wenn ich auf Spring-Beans zugreife und ähnliche Überprüfungen versuche:
%Vor%Tatsächlich findet dieser Code andere Anmerkungen wie @RequestMapping. Ich bin mir nicht sicher, was ich mit meiner benutzerdefinierten Anmerkung falsch mache.
Als ich Ihren Code durchging, habe ich herausgefunden, dass Sie Spring AOP mit CGLIB Proxying verwenden. Aufgrund dessen werden Ihre Klassen (die Methoden haben, die mit @Versioned
kommentiert sind) weitergeleitet.
Ich habe diese Lösung mit Ihrer Codebasis getestet.
Verwenden Sie den folgenden Code, der Ihr Problem beheben sollte. Suchen Sie nach weiteren Optionen unter dem Code-Snippet:
%Vor%Um eine Proxy-Klasse zu erkennen:
org.springframework.aop.support.AopUtils#isAoPProxy
org.springframework.cglib.proxy.Proxy#isProxyClass
java.lang.reflect.Proxy#isProxyClass
Ich habe gerade eine if
Bedingung geschrieben, die in Ihrem Fall ausreicht; Wenn jedoch mehrere Proxy-Dienstprogramme verwendet werden, müssen mehrere if-else
-Bedingungen basierend auf den obigen Informationen geschrieben werden.
applicationContext.getBean(beanName).getClass()
gibt Ihnen die umschriebene Klasse, die Spring um Ihre Zielklasse herum erstellt.
Was Sie wollen, ist, die Zielklasse, falls vorhanden, von Ihrer Spring-Bean zu bekommen.
Spring bietet eine nützliche Hilfsklasse zum Auflösen der so genannten AopUtils.class.
Unten ist, wie Sie es verwenden würden:
%Vor% Beachten Sie, dass Sie die Abhängigkeit spring-aop
Maven importieren müssen, um die AopUtils-Klasse zu erhalten:
Tags und Links java spring spring-mvc