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:
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!