Heim  >  Artikel  >  Java  >  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
Linda HamiltonOriginal
2024-10-31 16:54:30151Durchsuche

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>
<pre class="brush:php;toolbar:false">method2();

}

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


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>

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!

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