3
,我碰到下面的语句来了(第193页):的Spring AOP:确认在谈及“临春2.5” CGLIB代理行为
例如,CGLIB代理生成相应的字节码 调用任何直接使用无人值守的方法,大大减少了代理引入的开销。
我看了一下Spring的源代码并试了几次实验,但是无法证实这个说法。我可以写什么简单的程序来确认它?
,我碰到下面的语句来了(第193页):的Spring AOP:确认在谈及“临春2.5” CGLIB代理行为
例如,CGLIB代理生成相应的字节码 调用任何直接使用无人值守的方法,大大减少了代理引入的开销。
我看了一下Spring的源代码并试了几次实验,但是无法证实这个说法。我可以写什么简单的程序来确认它?
使用VisualVM并剖析代码,或使用BCEL转储字节码并查看程序集。对于visualvm路由,请剖析代码,拍摄快照,验证方法堆栈跟踪。
得到堆栈跟踪,我做了一些更容易。我在建议和非建议的方法中创建了一个Throwable,并打印了它的堆栈跟踪。但是对于这两者,它们都是由'Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept'调用的,后者又创建了一个'CglibMethodInvocation'对象并且继续调用它。所以从堆栈跟踪点来看,我没有看到任何区别。将尝试BCEL方法。 – shrini1000 2012-03-21 03:09:52
我尝试了BCEL的'Repository.lookupClass(clazz)',其中clazz是CGLIB代理类对象。但我得到了以下异常:线程“main”中的异常java.lang.ClassNotFoundException:SyntheticRepository无法加载foo.Foo $$ EnhancerByCGLIB $$ 42857850 – shrini1000 2012-03-21 07:49:51
我知道visualvm可以看穿Spring AOP代理(我必须在它之前对它们进行配置),我想试试看。 – 2012-03-21 14:06:07