加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

cglib调用过程

发布时间:2020-12-15 07:52:30 所属栏目:Java 来源:网络整理
导读:本篇文章不讲cglib如何应用,只从eclipse调试的角度看看从最外层的动态代理类调用到最内层的被代理类,经过了哪些中间步骤。 ? 废话不多说,直接上代码 被代理类: public class MySubject { public void doSomeThing() { System.err.println( "Do some thing

本篇文章不讲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

?

?

?

?

??

eclipse调试的时候不能加上断点,cglib动态生成的代理类需要反编译工具查看,截图已经提供了反编译后的代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读