Spring AOP メソッドが別のメソッド内のメソッド呼び出しをインターセプトしないのはなぜですか?

Linda Hamilton
リリース: 2024-10-31 16:54:30
オリジナル
151 人が閲覧しました

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

Spring AOP が別のメソッド内のメソッド呼び出しのインターセプトに失敗する

ABC.java で定義されている 2 つのメソッドについて考えてみましょう:< ;/p>

<br>public void method1() {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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>
<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>
ログイン後にコピー


ただし、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 サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:JPA と Hibernate を使用して日付/時刻とタイムスタンプを UTC タイムゾーンに保存するにはどうすればよいですか? 次の記事:Java のオーバーライドされていないオブジェクトに対して「hashCode()」メソッドはどのように機能しますか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!