Cglib経由でプロキシを構築する必要があります。プロキシの「スーパークラス」がCglibまたはCglibAopProxyによって生成される別のプロキシになることがあります。別のエンハンサーまたはCglibAopProxyによって生成されたプロキシでエンハンサーを作成する
しかし、春を3.0.6から4.2.4に変更した後は、状況が変わってしまいます。 私たちがproxyとaopを一緒に使用すると、どちらもうまくいきません。ユーザークラスのメソッドを直接呼び出すだけです(春3.0.6でうまく見えます、理由はわかりません)
私はトレースをトレースしました
CGLIB $が拘束= falseをCGLIB $ CALLBACK_0 = DynamicAdvisedInterceptor @ 8186 CGLIB $ CALLBACK_1 = StaticUnadvisedInterceptor @ 8535
...
:、などのフィールドを持つことになりますCglibAopProxyによって生成されたそのプロキシを見つけました私たちがthiを使った後エンハンサーのスーパークラスとしてのプロキシのクラス、それは次のようになります。InvokerHandlerの内部
CGLIB$BOUND=true [email protected] (the MethodInterceptor we added) CGLIB$CALLBACK_1=null ... CGLIB$CALLBACK_6=null ExampleController$$EnhancerBySpringCGLIB$$2ab2772f.CGLIB$BOUND=true ExampleController$$EnhancerBySpringCGLIB$$2ab2772f.CGLIB$CALLBACK_0=null
CglibAopProxyによって生成されたプロキシのインスタンスがあります。 InvokerHandlerで呼び出します
呼び出しがInvokeHandlerに入ってから、まずaopを処理してから、ユーザークラスを呼び出してください。しかし、私たちはこの問題以来、決して続けることはできません。