CGLIB动态代理
CGLIB动态代理
CGLib使用字节码技术生成代理类,在JDK1.6之前比java反射效率高,到jdk1.8的时候jdk的代理效率高于cglib代理
CGLIN是第三方提供的包,需要引入jar包
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency>
代码
//火车站 public class TrainStation { public void sell() { System.out.println("火车站卖票!"); } } import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * 代理工厂 * @author lyn */ public class ProxyFactory implements MethodInterceptor { private TrainStation target = new TrainStation(); public TrainStation getProxyObject() { //创建Enhancer对象,类似于JDK动态代理的Proxy类,下一步就是设置几个参数 Enhancer enhancer = new Enhancer(); //设置父类的字节码对象 enhancer.setSuperclass(target.getClass()); //设置回调函数 enhancer.setCallback(this); //创建代理对象 return (TrainStation) enhancer.create(); } /** * @param o 代理对象 * @param method 真实对象中的方法的Method实例 * @param args 实际参数 * @param methodProxy 代理对象中的方法的method实例 * @return * @throws Throwable */ @Override public TrainStation intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("代理点收取一些服务费用(CGLIB动态代理方式)"); return (TrainStation) methodProxy.invokeSuper(o, args); } } //测试 public class ProxyClient { public static void main(String[] args) { TrainStation proxyObject = new ProxyFactory().getProxyObject(); proxyObject.sell(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能