先来谈谈什么动态代理模式,在一家软件公司,假如你是一个软件开发工程师。当客户带着需求去找公司的时候,显然不会直接让你和客户谈,肯定是先和商务经理,产品经理类的谈需求。因为客户的需求可能千奇百怪,很有可能直接在商务谈的时候就直接终止合作,所以这个时候根本需要你去参与,当需求对接完毕可以投入开发的时候在由产品经理和你对接根据需求去开发。这个时候才相当与客户和你间接的合作。
在这个例子中产品经理类的角色就是代理对象,而你就是真实的对象。这就是一个动态代理模式,这里要将的是JDK的动态代理模式。

接口

public interface Forest {public void sayHello();
}

实现类

public class ForestImp implements Forest {public void sayHello() {System.err.println("Hello 蓝枫");}
}

建立代理对象和真实对象的联系,这个类需要实现InvocationHandler这个接口

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class JdkProxy implements InvocationHandler {private Object target = null; //用来保存真实对象public JdkProxy(Object target) {this.target = target;}public Object bind() { //绑定真实对象和代理对象return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.err.println("进入invoke方法");System.err.println("执行代理逻辑");//这里就相当与客户经理的谈判过程Object object = method.invoke(target, args);return object;}
}
public class JdkProxyTest {public static void main(String[] args) {ForestImp forestImp = new ForestImp();JdkProxy jdkProxy = new JdkProxy(forestImp);//传入真实对象Forest proxy = (Forest) jdkProxy.bind();//这个地方就相当与创建了一个ForestImpproxy.sayHello();}
}

小结:
JDK动态代理需要一个接口才能实现。
newProxyInstance方法包含3个参数。
第一个是类加载器,采用了target本身的类加载器。
第二个是把生成的动态代理对象下挂在哪些接口下,这个写法是放在target实现的接口下。ForestImp对象的接口显然就是Forest。
第三个是定义实现方法逻辑的代理类,this表示当前对象,这个对象必须实现InvocationHandler接口的invoke方法。

invoke方法的三个参数:
proxy,代理对象,就是bind方法生成的对象。
method,当前调度的方法。
args,调度方法的参数。
在使用代理对象调度方法的时候,就会进入到invoke方法里面去。
类比前面的例子,proxy相当于商务对象,target相当于就是你,bind方法是建立商务和你直接的关系。invoke方法就是商务实现的逻辑,由它控制对你的访问。

Java设计模式之JDK动态代理模式相关推荐

  1. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  2. 【强烈推荐】Java设计模式:怒肝代理模式,可真把我榨干了!

    你的一键三连是我巨大的动力! 设计模式系列 工厂模式 (程序员必知必会) 单例模式 (程序员必知必会) 一.什么是代理模式? 其实代理模式不仅仅只存在编程中,你细想人生处处不代理呢? 一家公司老板身边 ...

  3. Java设计模式(13)----------代理模式

    原文:https://www.imooc.com/article/24850 默课道可工程师学习地址:https://www.imooc.com/article/24850 介绍 代理模式中,在客户端 ...

  4. JDK动态代理模式这篇就够了

    JDK动态代理 第一章 代理的介绍 介绍:我们需要掌握的程度 动态代理(理解) 基于反射机制 掌握的程度: 1.什么是动态代理? 2.动态代理能够做什么? 1.1 什么是代理 代理,在我们日常生活之中 ...

  5. 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理

    为什么80%的码农都做不了架构师?>>>    一:在看此篇代码示例前,先看静态代理, 链接地址:http://my.oschina.net/dyyweb/blog/656760   ...

  6. JDK动态代理模式小白式详解

    动态代理模式到底是干啥的? 答:当我们想去修改一个类的实现,而又不能去直接修改.干预该类的代码时,我们就需要一个该类的代理类来辅助我们. 比如,我们想在每次调用某个类的save方法时,都在日志文件里写 ...

  7. 代理设计模式(JDK动态代理)什么是代理,静态代理动态代理实现,分析JDK代理实现逻辑,手动实现JDK代理逻辑。

    什么是代理? 从字面意思来看,代理比较好理解,无非就是代为处理的意思.举个例子,现在哪吒有女助理了,所以很多事情都不用我自己去处理了,比如说去银行排队取钱,那么我就可以叫我的女助理去代替我取钱并交给我 ...

  8. Java基础之02 动态代理模式172 173 类加载器原理分析

    动态代理 所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect ...

  9. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理

    文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...

最新文章

  1. Matlab数据的可视化 -- 线性图函数plot
  2. ★宣传广告变成社会标准
  3. 2个字节能存多少个16进制_LabVIEW高级编程技巧:如何从内存字节流中恢复原始数据...
  4. SAP MRP的计算步骤
  5. dbms_job涉及到的知识点
  6. 热图绘制一个快乐五一
  7. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关
  8. 嵌入式电路设计(工具准备)
  9. ftp linux 推送文件_Linux下SSH用FTP命令上传文件至另一个FTP空间
  10. windows,linux下SVN实现自动更新WEB目录
  11. 因未发项目奖金,一程序员删代码泄愤被判刑5个月
  12. Resize的使用————Transforms
  13. 鸿鹄系统和鸿蒙系统区别,荣耀智慧屏正式发布 鸿蒙系统+鸿鹄818芯片 售价3799元起...
  14. python 随机森林调参_scikit-learn随机森林调参小结
  15. shiro权限框架中五张基本数据表
  16. 【已解决】打开jar文件找不到或无法加载主类
  17. 华为路由交换由浅入深系列(二):静态路由、浮动路由、默认路由配置以及华为路由协议优先级总结
  18. JVM调优专题-JVM调试工具
  19. 计算机pc at代表什么意思啊,PC/XT 与PC/AT的分别?
  20. 基于C++的UKF代码示例,跟踪三次多项式曲线

热门文章

  1. 闲聊Oracle Exadata与Hadoop
  2. 关键路径和前导图的计算
  3. du -h df -h
  4. BAT的一个定时关机脚本
  5. 小红书KOL营销策略,如何根据策略来筛选kol
  6. 大电流导电滑环用途的介绍
  7. Android 通过蓝牙采集音频
  8. 自己动手在阿里云服务器上搭建一套zabbix+grafana监控系统
  9. 天翼物联与华为联合发布5GtoB终端认证标准2.0
  10. Java实现视频(mp4/flv/..)及图片(jpg/jpeg/png/..)给前端调用