栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 学习【框架篇(一)】Spring(六)代理模式(静态代理 & 动态代理)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 学习【框架篇(一)】Spring(六)代理模式(静态代理 & 动态代理)

文章目录
  • 10. 代理模式
    • 10.1 静态代理
      • 10.1.1 接口
      • 10.1.2 真实角色
      • 10.1.3 客户端访问角色
      • 10.1.4 代理角色
    • 10.2 静态代理再理解
    • 10.3 动态代理
      • 10.3.1 InvocationHandler
      • 10.3.2 Proxy
      • 10.3.3 举例
      • 10.3.4 万能代理类
      • 10.3.5 小结

10. 代理模式 10.1 静态代理

为什么要学习代理模式?
因为这就是 SpringAOP 的底层 --> 重点

代理模式的分类:

  • 静态代理
  • 动态代理

角色分析:

  • 抽象角色:一般会使用接口或者抽象类来解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实的角色,代理真实角色后,我们一般会做一些附属操作
  • 客户:访问代理对象的人

静态代理模式的好处:

  • 可以使真实角色的操作更加纯粹,不用去关注一些公共的业务
  • 公共业务就交给代理角色,实现了业务的分工
  • 公共业务发生拓展的时候,方便集中管理

缺点:

  • 一个真实的角色就会产生一个代理角色,代码量会翻倍,开发效率会变低

程序设计原则:尽量不要修改原有代码


10.1.1 接口

1 Rent 接口

10.1.2 真实角色

2.房东 真实角色

10.1.3 客户端访问角色
  1. 客人 客户端访问角色
  • 无代理时
  • 有代理

10.1.4 代理角色

4 代理 代理角色
尽量使用组合而不是继承房东

代理加附属操作 -> 房东没有的操作

输出


10.2 静态代理再理解

1 接口

2. 真实角色

新增业务:增加日志功能 -> 使用代理, 可不改变原有真实角色代码
3 代理角色

4 客户端输出

10.3 动态代理
  • 动态代理和静态代理角色一样
  • 动态代理的代理类是动态生成的,不是我们直接写好的
  • 动态代理分为两大类:基于接口的动态代理, 基于类的动态代理
    • 基于接口 – JDK 动态代理【我们在这里使用】
    • 基于类:cglib
    • java 字节码实现:javasist

需要了解两个类:Proxy:代理,InvocationHandler:调用处理程序

10.3.1 InvocationHandler

调用处理程序并返回结果

10.3.2 Proxy

生成动态代理实例



10.3.3 举例
  1. 动态调用的处理程序生成动态代理类 -> 注意这个是处理程序,不是代理类
    第一步:处理代理实例的

    第二步:可以生成动态代理类的

  2. 客户端调用


10.3.4 万能代理类


客户端调用


10.3.5 小结

动态代理模式的好处:

  • 可以使真实角色的操作更加纯粹,不用去关注一些公共的业务
  • 公共业务就交给代理角色,实现了业务的分工
  • 公共业务发生拓展的时候,方便集中管理
  • 一个动态代理类代理的是一个接口,一般就是对应的一类业务
  • 一个动态代理类可以代理多个类,只要是实现了同一个接口即可
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号