设计模式4——动态代理模式

动态代理定义

在程序运行时,通过反射机制动态地创建一个代理类。

动态代理的几点注意:

  1. 动态代理的体现:程序开始执行时是没有代理类的,在程序运行时,java利用反射机制动态生成代理类的实例。
  2. jdk技术支持:java在java.lang.reflect包中提供一个类和一个接口帮助我们创建和使用代理类实例,类是:Proxy类,接口是invocationHandler接口
  3. 两种代理类的模式区别:静态模式要求为程序中所有需要被访问的目标创建代理类,如果有100个代理目标,就需要创建100个代理类,让代理类直接访问目标对象。

举一个动态代理的栗子

1. 首先画栗子的类图

这里写图片描述

2. 具体的例子

Subject类

这里写图片描述

TargetSubejct类
这里写图片描述

DynamicInvocationHandler类

这里写图片描述

动态代理代码流程

这里写图片描述

总结动态dialing的流程
    1. jdk获取TargetSubejct上的所有接口列表,确定要生成的代理类类名。
    1. jdk根据接口信息和类名动态创建类的字节码。
    1. 通过类加载器将字节码转换成代理类class对象。
    1. 创建InvocationHandler的实例handler,用来处理对被代理类的所有方法的访问。
    1. 通过反射获取代理类中以handler类为参数的构造。
    1. 使用构造创建代理类的实例。
    1. 用户通过代理类的实例,调用接口里的方法,将方法参数和该方法传入handlerinvoke方法
    1. handlerinvoke方法里,调用method.invoke(subject, args),用来执行目标对象subject里参数为args的方法method
    1. 目标对象targetSubject执行具体业务逻辑,如果有返回值,就将返回传值会给handler

参考并感谢

https://www.jianshu.com/p/5478f170d9ee

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值