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动态生成的代理类需要反编译工具查看,截图已经提供了反编译后的代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人