Heim  >  Artikel  >  Java  >  Warum wird mein AOP-Aspekt in verschachtelten Methodenaufrufen nicht aufgerufen?

Warum wird mein AOP-Aspekt in verschachtelten Methodenaufrufen nicht aufgerufen?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 15:51:02325Durchsuche

Why is my AOP Aspect Not Invoked in Nested Method Calls?

Verschachtelte Methodenaufrufe und Spring AOP

Betrachten Sie den folgenden Code in ABC.java:

<code class="java">public void method1() {
    // ...
    method2();
    // ...
}

public void method2() {
    // ...
    // ...
}</code>

Das Hinzufügen von AOP zu Methode2 beinhaltet das Erstellen eines Aspekts , AOPLogger, enthält eine Methode zum Überprüfen des Zugriffs, checkAccess. Die Spring-Konfiguration umfasst:

<code class="xml"><bean id="advice" class="p.AOPLogger" />
<aop:config>
    <aop:pointcut id="abc" expression="execution(*p.ABC.method2(..))" />
    <aop:aspect id="service" ref="advice">
        <aop:before pointcut-ref="abc" method="checkAccess" />
    </aop:aspect>
</aop:config></code>

Der Aspekt checkAccess wird jedoch nicht aufgerufen, wenn Methode2 aufgerufen wird. Was fehlt?

AOP-Proxys und Bean-Injektionen

AOP funktioniert, indem es Aspekte auf Proxys anwendet, die die Bean umgeben. Wenn auf eine Bean verwiesen wird, handelt es sich nicht um die instanziierte Klasse, sondern um eine synthetische Klasse, die an die tatsächliche Klasse delegiert und Funktionen wie AOP hinzufügt.

Im Beispiel wird Methode2 direkt in der Klasse aufgerufen. Bei der Injektion als Spring-Bean wird die umschließende Klasse als Proxy injiziert und löst die Aspekte bei Methodenaufrufen aus.

Um AOP bei verschachtelten Methodenaufrufen aufzurufen, berücksichtigen Sie die folgenden Optionen:

  1. Bean-Trennung: Methode 1 und Methode 2 in separate Beans aufteilen.
  2. Nicht-Spring-AOP-Framework: Nutzen Sie ein nicht-Spring-orientiertes AOP-Framework für eine detailliertere Kontrolle über Aspektanwendung.

Die Spring-Dokumentation enthält weitere Details und mögliche Problemumgehungen.

Das obige ist der detaillierte Inhalt vonWarum wird mein AOP-Aspekt in verschachtelten Methodenaufrufen nicht aufgerufen?. 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