Java基础之代理模式

一、 代理与代理模式

1、代理的简述:

  1. 如买火车票这件小事:黄牛相当于是我们本人的的代理,我们可以通过黄牛买票。通过黄牛买票,我们可以避免与火车站的直接交互,可以省很多事,并且还能享受到黄牛更好的服务(如果钱给够的话)。
  2. 在软件开发中,代理也具有类似的作用,并且一般可以分为静态代理和动态代理两种,上述的这个黄牛买票的例子就是静态代理

1.1、为什么要学习代理模式

因为这是 SpringAOP 的底层(Spring和SpringMVC)
根据代理类的创建时机和创建方式的不同,我们可以将代理分为静态代理和动态代理两种形式

2、静态代理

角色分析:

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

代理模式
优点:

  • 可以使真实角色的操作更加纯粹,不用关注一些公共业务
  • 公共业务就交给代理角色!实现业务的分工!
  • 公共业务发生扩展的时候,方便集中管理
    缺点:
  • 一个真实角色就会产生代理角色;代码量会翻倍,开发效率变低

在这里插入图片描述

3、动态代理

基于反射实现

  • 角色分析:和静态代理一致
  • 动态代理的代理类是动态生成的
  • 动态代理分为两大类:
    1. 基于接口的动态代理
      JDK动态代理
      1. 创建代理处理程序的类:自动生成代理类
      2. 实现InvocationHandler接口,调用invoke方法,处理代理实例,并返回类对象结果,内含参数:proxy(被代理对象),method(被代理方法),args(本身类加载器:Classloader,被代理对象类接口集合(interfaces),类本身(实现了InvocationHandler))
      3. 创建生成得到代理类 getProxy 方法
        返回Proxy.newProxyInstance(本身类加载器:Classloader,被代理对象类接口集合(interfaces),类本身(实现了InvocationHandler))的结果
    2. 基于类的动态代理
      CGLIB
      Java字节码实现:Javassist
      在这里插入图片描述

4、静态代理与动态代理的区别是什么呢?

  1. 静态代理:其实质是自己手写(或者用工具生成)代理类,也就是在程序运行前就已经存在的编译好的代理类
  2. 动态代理:可以在程序运行期间根据需要动态的创建代理类及其实例来完成具体的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值