Heim > Java > javaLernprogramm > Hauptteil

Warum löst mein AOP-Aspekt im Frühjahr keine verschachtelten Methodenaufrufe aus?

Linda Hamilton
Freigeben: 2024-11-01 01:40:28
Original
1013 Leute haben es durchsucht

Why Doesn't My AOP Aspect Trigger for Nested Method Calls in Spring?

Fehlerbehebung bei AOP-Fehlern für verschachtelte Methodenaufrufe im Frühjahr

Innerhalb der ABC.java-Klasse sind zwei Methoden definiert: method1() und method2 (). Das Ziel besteht darin, AOP für method2()-Aufrufe zu implementieren.

Ein Ansatz besteht darin, eine AOPLogger.java-Klasse mit einer checkAccess()-Aspektmethode zu erstellen. In der Konfigurationsdatei ist eine Advice-Bean definiert und ein Aspekt so konfiguriert, dass er checkAccess() aufruft, bevor Methode2() aufgerufen wird.

Trotz dieser Konfigurationen wird die Methode checkAccess() jedoch nicht aufgerufen, wenn Methode2( ) wird ausgeführt.

Ursache:

In Spring AOP werden Aspekte auf ein Proxy-Objekt angewendet, das die Bean umgibt. Wenn eine Bean-Instanz abgerufen wird, handelt es sich nicht um die eigentliche Klasse, sondern um eine synthetische Klasse, die Schnittstellen implementiert und Funktionen wie AOP hinzufügt.

Lösung:

Im vorliegenden Szenario method1() ruft direkt method2() auf. Der Aspekt wird nicht ausgelöst, da die Methode nicht für das Proxy-Objekt aufgerufen wird.

Um dieses Problem zu beheben, gibt es zwei Optionen:

  • Methode1() und Methode2() aufteilen separate Bohnen. Dadurch kann der Aspekt auf das Proxy-Objekt angewendet werden, das method2() umgibt.
  • Verwenden Sie ein nicht Spring-orientiertes AOP-Framework, das nicht auf Proxy-Objektmechanismen basiert.

Erklärung:

Die Spring-Dokumentation unter „Grundlegendes zu AOP-Proxys“ erläutert dieses Verhalten und bietet Problemumgehungen. Eine Problemumgehung besteht darin, die Methoden wie oben vorgeschlagen in separate Beans aufzuteilen.

Das obige ist der detaillierte Inhalt vonWarum löst mein AOP-Aspekt im Frühjahr keine verschachtelten Methodenaufrufe aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage