Suchen Sie benutzerdefinierte Annotations auf Methodenebene in einem Spring-Kontext

8

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.

    
kamoor 13.01.2015, 19:25
quelle

2 Antworten

6

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:

  • Für den Spring AOP-Proxy, der einen Proxy-Mechanismus verwendet, verwenden Sie org.springframework.aop.support.AopUtils#isAoPProxy
  • Wenn Sie mit Spring CGLIB arbeiten (nicht über Spring AOP), verwenden Sie org.springframework.cglib.proxy.Proxy#isProxyClass
  • Wenn Sie den JDK-Proxy verwenden, verwenden Sie 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.

    
owaism 13.01.2015, 22:56
quelle
4

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:

%Vor%     
Angad 13.01.2015 22:19
quelle

Tags und Links