以下は CGLib のネイティブな書き込みメソッドです (net.sf.cglib.proxy.* パッケージ内のクラスを使用して実装されます)
リーリー出力結果は次のとおりです:
before fun1
before fun2
fun2() は foo.fun1() を通じて呼び出されますが、fun()2 は引き続きプロキシできることがわかります。
ただし、Spring AOP の基本的な記述方法を使用する場合:
リーリー出力結果は次のとおりです。
fun1 の前
fun2
fun2 メソッドがプロキシされていないことがわかります。
なぜこのような違いがあるのでしょうか?
阿神2017-07-03 11:45:34
Spring の AOP は内部メソッド呼び出しをインターセプトできません。Spring は実際のオブジェクトの Bean と、プロキシが拡張された後の proxyBean を報告します:
proxyBean は以下と同等です。
invoke(Bean,メソッド)
after
このように、fun2 は実際の Bean によって実際に呼び出されます (invoke は実際のオブジェクトを使用して、実行したいメソッドを実行します)。したがって、before の効果はありません。
実際に cglib を使用するときは、プロセス全体でプロキシ Bean を使用します