动态代理是一种设计模式,它允许在运行时创建一个代理对象,该对象可以代表另一个对象执行相同的方法,同时添加额外的功能或行为。在Java中,动态代理主要分为两种类型:JDK动态代理和CGLib动态代理。 **JDK动态代理** JDK动态代理基于Java的接口实现。它要求目标对象必须实现至少一个接口。代理对象是通过`java.lang.reflect.Proxy`类的`newProxyInstance()`方法动态创建的。这个方法接收三个参数: 1. `ClassLoader loader`:目标对象的类加载器,用于加载代理对象。 2. `Class<?>[] interfaces`:目标对象实现的所有接口,代理对象将实现这些接口。 3. `InvocationHandler handler`:一个实现了`java.lang.reflect.InvocationHandler`接口的对象,它定义了当调用代理对象的方法时应如何处理。 在`InvocationHandler`的`invoke()`方法中,你可以添加额外的功能,如日志、事务管理等,然后调用目标对象的实际方法。 例如: ```java public Object getAgent(){ return Proxy.newProxyInstance( yeWu.getClass().getClassLoader(), yeWu.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强功能 System.out.println("预订场地.............."); System.out.println("预订时间.............."); // 调用目标方法 Object returnValue = method.invoke(yeWu, args); // 结算费用 System.out.println("结算费用.............."); return returnValue; // 返回目标方法的结果 } }); } ``` **CGLib动态代理** CGLib(Code Generation Library)是一种第三方库,它不依赖于接口,而是通过创建目标对象的子类来实现动态代理。这意味着,即使目标对象没有实现任何接口,CGLib也能为其创建代理。CGLib使用字节码技术动态生成代理类,并在运行时将其加载到JVM中。 CGLib的核心类是`cglib.proxy.Enhancer`,它可以配置代理类的创建。`Enhancer`类的`create()`方法用于生成代理对象。与JDK动态代理相比,CGLib的代理对象是目标类的子类,因此能够访问非接口方法。 ```java Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(YeWu.class); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { // 增强功能 System.out.println("预订场地.............."); System.out.println("预订时间.............."); // 调用目标方法 Object returnValue = proxy.invokeSuper(obj, args); // 结算费用 System.out.println("结算费用.............."); return returnValue; } }); YeWu proxyObj = (YeWu) enhancer.create(); proxyObj.sing(); ``` 总结来说,动态代理在Java中主要用于在不修改原有代码的情况下,对目标对象的行为进行扩展或增强,如日志记录、性能监控、事务管理等。JDK动态代理适用于目标对象实现了接口的情况,而CGLib则更适合不依赖接口的代理需求。



















- 粉丝: 35
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 财务信息化:促进中小企业发展的方法探究.docx
- 智能家居—可能性研究分析评测报告.doc
- 互联网+一站式校园创业服务探索.docx
- 项目管理中的人力资源管理和沟通管理.docx
- 云计算网络环境下的信息安全问题研究.docx
- 大学设计箱体注塑模CADCAM方案一.doc
- 大数据下的医院财务信息共享研究.docx
- C语言程序设计算法资料.ppt
- PLC控制机械手95153.doc
- 学生成绩管理系统数据结构程序设计实验报告2.doc
- 网络工程第一章ppt.ppt
- 学校、幼儿园网络视频监控方案-教育文博.docx
- 大模型提示词优化器,让大模型根据测试结果进行反思生成优化建议,并结合用户要求进行提示词优化
- 单片机的按摩机的控制研究与设计开发.doc
- 伪均匀随机数的计算机检验.docx
- 大模型提示词优化器:依测试反思提建议并按用户要求优化



评论0