ホームページ  >  に質問  >  本文

java - ネイティブ CGLib 内部メソッドは相互に呼び出すときにプロキシできますが、CGLib に基づく Spring AOP はプロキシに失敗します。

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

リーリー

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

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

リーリー

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

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

phpcn_u1582phpcn_u15822664日前1148

全員に返信(1)返信します

  • 阿神

    阿神2017-07-03 11:45:34

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

    invoke(Bean,メソッド)

    after

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

    返事
    0
  • キャンセル返事