ホームページ  >  記事  >  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 で定義されている 2 つのメソッドについて考えてみましょう:< ;/p>

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

}

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

method2 呼び出しに AOP を適用するには、checkAccess アスペクト メソッドを使用して AOPLogger.java クラスを定義しました。設定ファイル内:

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


ただし、me​​thod2 が呼び出されると、AOPLogger の checkAccess メソッドはトリガーされません。

説明

AOP アスペクトは、Bean を囲むプロキシに適用されます。 Bean への参照を取得するとき、実際には構成で指定されたクラスを操作しているわけではありません。代わりに、適切なインターフェイスを実装し、呼び出しを委任し、追加機能 (AOP など) を提供する合成クラスが表示されます。

この場合、クラスでメソッド2を直接呼び出します。そのクラスのインスタンスが Spring Bean として別の Bean に注入された場合、そのインスタンスはプロキシとして注入されます。その結果、メソッド呼び出しはすべてプロキシに送信されます (そしてアスペクトがトリガーされます)。

ソリューション

< p>この問題に対処するには、次のオプションを検討してください:

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

以上がSpring AOP メソッドが別のメソッド内のメソッド呼び出しをインターセプトしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。