Spring AOP:确认CGLIB代理行为

3
在参考《Pro Spring 2.5》时,我发现以下语句(第193页):
“例如,CGLIB代理生成适当的字节码来直接调用任何未经建议的方法,从而显着减少代理引入的开销。”
我查看了Spring源代码并尝试了一些实验,但无法确认该说法。我应该编写什么简单程序来确认它?
1个回答

0
使用VisualVM对代码进行分析,或者使用BCEL转储字节码并查看汇编代码。对于VisualVM方法,请对代码进行分析,拍摄快照,并验证方法堆栈跟踪。

为了获取堆栈跟踪,我做了一些简单的事情。我在建议和非建议方法中都创建了一个Throwable对象,并打印了它的堆栈跟踪。但是对于两者来说,它们都是由'Cglib2AopProxy$DynamicAdvisedInterceptor.intercept'调用的,后者又创建了一个'CglibMethodInvocation'对象并在其上调用了proceed方法。因此,从堆栈跟踪的角度来看,我没有看到任何区别。将尝试BCEL方法。 - shrini1000
我尝试使用BCEL的'Repository.lookupClass(clazz)',其中clazz是CGLIB代理类对象。但是我得到了以下异常:Exception in thread "main" java.lang.ClassNotFoundException: SyntheticRepository could not load foo.Foo$$EnhancerByCGLIB$$42857850 - shrini1000
我知道VisualVM可以看到Spring AOP代理(我以前必须对它们进行分析),我猜你可以试试。 - Jonathan S. Fisher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接