Cglib动态代理
Cglib 动态代理
Cglib 动态代理是针对代理的类, 动态生成一个子类, 然后子类覆盖代理类中的方法, 如果是private或是final类修饰的方法,则不会被重写。
CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。
CGLIB作为一个开源项目,其代码托管在github,地址为:https://github.com/cglib/cglib
示例:
需要代理的类:
public class Engineer { // 可以被代理 public void eat() { System.out.println("工程师正在吃饭"); } // final 方法不会被生成的子类覆盖 public final void work() { System.out.println("工程师正在工作"); } // private 方法不会被生成的子类覆盖 private void play() { System.out.println("this engineer is playing game"); } }
CGLIB 代理类:
import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class CglibProxy implements MethodInterceptor { private Object target; public CglibProxy(Object target) { this.target = target; } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("### before invocation"); Object result = method.invoke(target, objects); System.out.println("### end invocation"); return result; } public static Object getProxy(Object target) { Enhancer enhancer = new Enhancer(); // 设置需要代理的对象 enhancer.setSuperclass(target.getClass()); // 设置代理人 enhancer.setCallback(new CglibProxy(target)); return enhancer.create(); } }
测试方法:
public class CglibMainTest { public static void main(String[] args) { // 生成 Cglib 代理类 Engineer engineerProxy = (Engineer) CglibProxy.getProxy(new Engineer()); // 调用相关方法 engineerProxy.eat(); } }
运行结果:
### before invocation
工程师正在吃饭
### end invocation
来源:代理模式-https://www.runoob.com/design-pattern/proxy-pattern.html
【推荐】国内首个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%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律