java - ネイティブ CGLib 内部メソッドは相互に呼び出すときにプロキシできますが、CGLib に基づく Spring AOP はプロキシに失敗します。
phpcn_u1582
phpcn_u1582 2017-07-03 11:43:34
0
1
1200

以下は CGLib のネイティブな書き込みメソッドです (net.sf.cglib.proxy.* パッケージ内のクラスを使用して実装されます)

リーリー

出力結果は次のとおりです:
before fun1
before fun2
fun2() は foo.fun1() を通じて呼び出されますが、fun()2 は引き続きプロキシできることがわかります。

ただし、Spring AOP の基本的な記述方法を使用する場合:

リーリー

出力結果は次のとおりです。
fun1 の前
fun2
fun2 メソッドがプロキシされていないことがわかります。

なぜこのような違いがあるのでしょうか?

phpcn_u1582
phpcn_u1582

全員に返信(1)
阿神

Spring の AOP は内部メソッド呼び出しをインターセプトできません。Spring は実際のオブジェクトの Bean と、プロキシが拡張された後の proxyBean を報告します:
proxyBean は以下と同等です。

invoke(Bean,メソッド)

after

このように、fun2 は実際の Bean によって実際に呼び出されます (invoke は実際のオブジェクトを使用して、実行したいメソッドを実行します)。したがって、before の効果はありません。
実際に cglib を使用するときは、プロセス全体でプロキシ Bean を使用します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート