静态代理和动态代理

一、代理模式的核心本质

无论静态代理还是动态代理,本质都是 "解耦核心业务与非核心功能":

  • 目标对象:专注核心业务(如房东出租房子、支付系统扣款);
  • 代理对象:负责非核心功能(如身份验证、日志记录、事务控制);
  • 用户视角:只与代理对象交互,感知不到目标对象的存在,但能享受到 "非核心功能 + 核心业务" 的完整服务。

二、静态代理:提前定制的 "专属中间人"

1. 核心逻辑

静态代理是编译期绑定特定目标对象与专属代理逻辑,代理类提前编写完成,调用时按 "固定路径" 执行的一对一代理模式。简单来说,就是为某个特定业务定制一个专属代理,代理逻辑和目标对象强绑定,无法复用。

2. 执行流程(逻辑层面)

  1. 预设绑定:提前确定 "代理对象 - 目标对象 - 专属代理逻辑" 的固定组合(如为 "租房业务" 定制 "中介代理",绑定 "身份验证 + 签合同" 的专属逻辑);
  2. 调用执行:用户调用代理对象 → 代理执行专属前置逻辑 → 代理调用目标对象核心逻辑 → 代理执行专属后置逻辑 → 返回结果;
  3. 扩展限制:新增业务需重新编写对应的代理类和代理逻辑,无法复用已有规则。

3. 适用场景

适合业务场景简单、目标对象固定且无需频繁扩展的场景,比如小型系统的单一业务增强(如仅为 "订单查询" 添加权限校验)。

4. 核心特点

  • 优点:逻辑简单、直观易懂,开发和维护成本低;
  • 缺点:耦合度高、代码冗余,新增业务需重复编写代理逻辑。

三、动态代理:灵活适配的 "通用模板人"

1. 核心逻辑

动态代理是先定义通用代理规则,运行时为任意符合条件的目标对象动态生成代理类,调用时按统一规则执行的一对多代理模式。简单来说,就是先制定一套通用的增强规则,后续所有业务只需绑定该规则,即可自动生成代理,无需重复编写逻辑。

2. 执行流程(逻辑层面)

  1. 制定规则:定义一套与具体业务无关的通用代理规则(如 "所有业务都先做身份验证,后记录操作日志");
  2. 动态匹配:需要代理某个业务时,将目标对象与通用规则绑定,运行时自动生成临时代理对象;
  3. 调用执行:用户调用临时代理对象 → 代理执行通用前置逻辑 → 代理调用当前绑定目标对象的核心逻辑 → 代理执行通用后置逻辑 → 返回结果;
  4. 扩展优势:新增业务只需实现统一接口,绑定已有通用规则即可,无需修改代理逻辑。

3. 适用场景

适合多业务统一管控、需频繁扩展的复杂场景,比如电商系统的 "支付 / 退款 / 充值" 统一加日志、Spring AOP 的切面增强等。

4. 核心特点

  • 优点:耦合度低、逻辑复用性强,扩展灵活;
  • 缺点:逻辑稍抽象,需理解 "运行时动态生成代理" 的底层思路。

四、静态代理 vs 动态代理:核心对比

维度 静态代理 动态代理
代理类创建时机 编译期(提前编写) 运行期(动态生成)
规则与对象关系 一对一(专属规则绑定特定对象) 一对多(通用规则适配任意对象)
调用逻辑流转 固定路径(专属逻辑 + 固定核心逻辑) 动态路径(通用逻辑 + 当前核心逻辑)
扩展成本 新增业务需新增代理类 / 规则 新增业务仅需绑定已有规则
相关推荐
不光头强4 小时前
代理模式实现,静态,动态
代理模式
逆境不可逃5 小时前
【从零入门23种设计模式12】结构型之代理模式(Spring AOP + 自定义注解 + 切面的实战)
设计模式·代理模式
一碗烈酒16 小时前
【使用Python临时搭建代理转发服务,内网穿透】
python·测试工具·代理模式
tsyjjOvO17 小时前
代理模式详解:静态代理、JDK 动态代理、CGLIB 动态代理
java·开发语言·代理模式
柒.梧.15 天前
Java代理模式精讲:静态代理+JDK动态代理
java·开发语言·代理模式
Forget_855016 天前
RHEL——HAProxy模式
代理模式
mjhcsp19 天前
C++ 树形 DP解析
开发语言·c++·动态规划·代理模式
不想看见40419 天前
House Robber 基本动态规划:一维--力扣101算法题解笔记
笔记·算法·leetcode·代理模式
忘梓.22 天前
解锁动态规划的奥秘:从零到精通的创新思维解析(10)
c++·算法·动态规划·代理模式