本篇文章不讲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.cglib$doSomeThing$0() line: not available
MySubject$$EnhancerBycglib$$24226c3c$$FastClassBycglib$$a7941ac2.invoke(int,Object,Object[]) line: not available
MethodProxy.invokeSuper(Object,Object[]) line: 244
cglibMethodInterceptor.intercept(Object,Method,Object[],MethodProxy) line: 14
MySubject$$EnhancerBycglib$$24226c3c.doSomeThing() line: not available
cglibProxyWriter.main(String[]) line: 16
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。