cglib调用过程
本篇文章不讲cglib如何应用,只从eclipse调试的角度看看从最外层的动态代理类调用到最内层的被代理类,经过了哪些中间步骤。 ? 废话不多说,直接上代码 被代理类: public class MySubject { public void doSomeThing() { System.err.println("Do some thing!"); } } ? ? 拦截器: public class CgLibMethodInterceptor implements MethodInterceptor { @Override public Object intercept(Object target,Method method,Object[] args,MethodProxy proxy) throws Throwable { System.err.println("before "); Object result = proxy.invokeSuper(target,args); System.err.println("after " + result); return result; } } 测试cglib动态代理: public class CglibProxyWriter { public static void main(String[] args) { System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"D:cglib-class"); MySubject subject= (MySubject) Enhancer.create(MySubject.class,new CgLibMethodInterceptor()); subject.doSomeThing(); } }
? 从调用栈可以清晰的看到最外层到最内层的调用逻辑。 MySubject$$EnhancerByCGLIB$$24226c3c(MySubject).doSomeThing() line: 6 ? MySubject$$EnhancerByCGLIB$$24226c3c(MySubject).doSomeThing() line: 6
?MySubject$$EnhancerByCGLIB$$24226c3c.CGLIB$doSomeThing$0() line: not available? ? MySubject$$EnhancerByCGLIB$$24226c3c$$FastClassByCGLIB$$a7941ac2.invoke(int,Object[]) line: not available
? ?MethodProxy.invokeSuper(Object,Object[]) line: 244 ?CgLibMethodInterceptor.intercept(Object,MethodProxy) line: 14 MySubject$$EnhancerByCGLIB$$24226c3c.doSomeThing() line: not available
?CglibProxyWriter.main(String[]) line: 16 ? ? ?
? ?? eclipse调试的时候不能加上断点,cglib动态生成的代理类需要反编译工具查看,截图已经提供了反编译后的代码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |