Heim > Java > javaLernprogramm > Warum fängt mein Spring AOP Methodenaufrufe innerhalb einer anderen Methode nicht ab?

Warum fängt mein Spring AOP Methodenaufrufe innerhalb einer anderen Methode nicht ab?

Linda Hamilton
Freigeben: 2024-10-31 16:54:30
Original
252 Leute haben es durchsucht

Why Doesn't My Spring AOP Intercept Method Calls Within Another Method?

Spring AOP kann den Methodenaufruf innerhalb einer anderen Methode nicht abfangen

Betrachten Sie zwei in ABC.java definierte Methoden:< ;/p>

<br>public void method1() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">method2();
Nach dem Login kopieren

}

public void method2() {}
< ;/pre>

Um AOP auf Methode2-Aufrufe anzuwenden, haben Sie eine AOPLogger.java-Klasse mit einer checkAccess-Aspektmethode definiert. In Ihrer Konfigurationsdatei:

<br><bean id="advice" class="p.AOPLogger" /><br><aop:config> </p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
<aop:aspect id="service" ref="advice">
    <aop:before pointcut-ref="abc" method="checkAccess" />          
</aop:aspect>
Nach dem Login kopieren


Wenn jedoch Methode2 aufgerufen wird, wird die checkAccess-Methode in AOPLogger nicht ausgelöst.

Erklärung

Der AOP-Aspekt wird auf einen Proxy angewendet, der die Bean umgibt. Wenn Sie einen Verweis auf eine Bean erhalten, arbeiten Sie nicht tatsächlich mit der in Ihrer Konfiguration angegebenen Klasse. Stattdessen wird Ihnen eine synthetische Klasse präsentiert, die die entsprechenden Schnittstellen implementiert, Aufrufe delegiert und zusätzliche Funktionalität bereitstellt (z. B. Ihr AOP).

In diesem Fall sind Sie es direktes Aufrufen von Methode2 für die Klasse. Wenn die Instanz dieser Klasse als Spring-Bean in eine andere Bean eingefügt würde, würde sie als Proxy eingefügt. Infolgedessen würden alle Methodenaufrufe an den Proxy weitergeleitet (und die Aspekte würden ausgelöst).

Solutions

< p>Um dieses Problem zu beheben, ziehen Sie die folgenden Optionen in Betracht:

    <li>Separate method1 and method2 into distinct beans.</li>
    <li>Employ a non-Spring AOP framework.</li>
    Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum fängt mein Spring AOP Methodenaufrufe innerhalb einer anderen Methode nicht ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Wie speichere ich Datum/Uhrzeit und Zeitstempel in der UTC-Zeitzone mit JPA und Hibernate? Nächster Artikel:Wie funktioniert die Methode „hashCode()“ für nicht überschriebene Objekte in Java?
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
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage