cglib调用过程

本篇文章不讲cglib如何应用,只从eclipse调试的角度看看从最外层的动态代理类调用到最内层的被代理类,经过了哪些中间步骤。

 

废话不多说,直接上代码

被代理类:

public class MySubject {
    public void doSomeThing() {
        System.err.println("Do some thing!");
    }    
}

 

 

拦截器:

1
2
3
4
5
6
7
8
9
10
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动态代理:

1
2
3
4
5
6
7
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, 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

 

 

 
复制代码

 

  

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

 

 

 

 

 

 

 

 

 

 

posted on   pmh905001  阅读(670)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示