2012-03-19 38 views
3

,我碰到下面的语句来了(第193页):的Spring AOP:确认在谈及“临春2.5” CGLIB代理行为

例如,CGLIB代理生成相​​应的字节码 调用任何直接使用无人值守的方法,大大减少了代理引入的开销。

我看了一下Spring的源代码并试了几次实验,但是无法证实这个说法。我可以写什么简单的程序来确认它?

回答

0

使用VisualVM并剖析代码,或使用BCEL转储字节码并查看程序集。对于visualvm路由,请剖析代码,拍摄快照,验证方法堆栈跟踪。

+0

得到堆栈跟踪,我做了一些更容易。我在建议和非建议的方法中创建了一个Throwable,并打印了它的堆栈跟踪。但是对于这两者,它们都是由'Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept'调用的,后者又创建了一个'CglibMethodInvocation'对象并且继续调用它。所以从堆栈跟踪点来看,我没有看到任何区别。将尝试BCEL方法。 – shrini1000 2012-03-21 03:09:52

+0

我尝试了BCEL的'Repository.lookupClass(clazz)',其中clazz是CGLIB代理类对象。但我得到了以下异常:线程“main”中的异常java.lang.ClassNotFoundException:SyntheticRepository无法加载foo.Foo $$ EnhancerByCGLIB $$ 42857850 – shrini1000 2012-03-21 07:49:51

+0

我知道visualvm可以看穿Spring AOP代理(我必须在它之前对它们进行配置),我想试试看。 – 2012-03-21 14:06:07