首頁  >  文章  >  Java  >  為什麼我的 Spring AOP 不攔截另一個方法中的方法呼叫?

為什麼我的 Spring AOP 不攔截另一個方法中的方法呼叫?

Linda Hamilton
Linda Hamilton原創
2024-10-31 16:54:30151瀏覽

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

Spring AOP 無法攔截另一個方法中的方法呼叫

考慮ABC.java 定義的兩個方法:

<br>public void method1() {<pre class="brush:php;toolbar:false">method2();

}

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

要在method2 呼叫上套用AOP,您已經定義了一個帶有checkAccess 切面方法的AOPLogger.java 類別。在您的設定檔中:

<br><bean id="advice" class="p.AOPLogger"></bean><br><config>  <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>


但是呼叫method2時,並沒有觸發AOPLogger中的checkAccess方法。

說明

AOP 方面應用於圍繞 bean 的代理。當您取得 bean 的參考時,您實際上並未使用組態中指定的類別。相反,您會看到一個合成類,它實現適當的介面、委託呼叫並提供附加功能(例如,您的 AOP)。

在這種情況下,您是直接呼叫類別的method2。如果該類別的實例作為 Spring bean 注入到另一個 bean 中,那麼它將作為代理注入。因此,任何方法呼叫都將定向到代理(並且將觸發方面)。

要解決此問題,請考慮以下選項:

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

    以上是為什麼我的 Spring AOP 不攔截另一個方法中的方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn