先来谈谈什么动态代理模式,在一家软件公司,假如你是一个软件开发工程师。当客户带着需求去找公司的时候,显然不会直接让你和客户谈,肯定是先和商务经理,产品经理类的谈需求。因为客户的需求可能千奇百怪,很有可能直接在商务谈的时候就直接终止合作,所以这个时候根本需要你去参与,当需求对接完毕可以投入开发的时候在由产品经理和你对接根据需求去开发。这个时候才相当与客户和你间接的合作。
在这个例子中产品经理类的角色就是代理对象,而你就是真实的对象。这就是一个动态代理模式,这里要将的是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. 页面A使用window.open打开页面B,然后取得B的返回值
  2. 在java中 接口修饰符,Java接口中的修饰符
  3. python怎么设置代码执行时间_python 代码运行时间获取方式详解
  4. Linux Ubuntu 安装 Matlab
  5. Spring高级应用之bean的生命周期
  6. oracle java vm,我可以使用Oracle Java 7 HotSpot VM安装DCEVM吗?
  7. sqlserver 导出数据库表结构和数据生成脚本
  8. 华为 博士 实习_华科女博士年薪156入职华为!最新回应:在深圳也难买房…
  9. 谈谈javascript中原型继承
  10. Linux经常使用命令(十六) - whereis
  11. thinkphp5 mysql加1_ThinkPHP5.1的数据库链接和增删改查
  12. python 打印unicode字符串
  13. C++处理有道单词导出单词本
  14. 信号峰拟合的MATLAB程序,包括高斯拟合,多高斯拟合等多种类型
  15. YOLOv5 完美实现中文标签显示
  16. 软件设计师认证 -如何画数据流图
  17. 【Qt】动态刷新lcdNumber显示的值
  18. 格兰杰因果关系检验(原理及Python实例)
  19. LNMP 架构部署(附:部署 Discuz 社区论坛 Web 应用)
  20. PMP计算(带例题)

热门文章

  1. 5G时代,给我们的生活带来哪些改变?
  2. 国内物联网平台(5):机智云IoT物联网云服务平台及智能硬件自助开发平台
  3. C 超级难搞定的 删除字符串中的子串
  4. 稳定性测试JVM内存监控
  5. c\c++语言删除数组中重复元素
  6. 关于奈奎斯特判据的通俗理解
  7. 微信小程序使用京东云实现垃圾分类图片识别垃圾分类
  8. 此系统禁止运行脚本解决办法
  9. Python实现自动化给视频实时加字幕,软件已打包!
  10. PullAndTab组合横排滑动上落下提