静态代理和动态代理

一、代理模式的核心本质

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

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

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

1. 核心逻辑

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

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

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

3. 适用场景

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

4. 核心特点

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

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

1. 核心逻辑

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

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

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

3. 适用场景

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

4. 核心特点

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

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

维度 静态代理 动态代理
代理类创建时机 编译期(提前编写) 运行期(动态生成)
规则与对象关系 一对一(专属规则绑定特定对象) 一对多(通用规则适配任意对象)
调用逻辑流转 固定路径(专属逻辑 + 固定核心逻辑) 动态路径(通用逻辑 + 当前核心逻辑)
扩展成本 新增业务需新增代理类 / 规则 新增业务仅需绑定已有规则
相关推荐
江畔何人初21 小时前
iptables 和 IPVS 代理模式 Service 的区别
linux·运维·服务器·网络·云原生·kubernetes·代理模式
时代观察者3 天前
2026年瑞士TESA代理商盘点:行业前五强,谁在领跑精密测
代理模式
ab1515177 天前
3.24二刷基础134、135、129,完成进阶98、99
代理模式
MegaDataFlowers8 天前
静态/动态代理模式
java·开发语言·代理模式
砍光二叉树8 天前
【设计模式】结构型-代理模式
设计模式·系统安全·代理模式
ambition202429 天前
动态规划解最长不下降子序列:深入理解状态转移与内层循环
代理模式
小王不爱笑13213 天前
Java 代理模式与 AOP 底层
java·开发语言·代理模式
青主创享阁14 天前
玄晶引擎XgenCore Works V2.8.1升级解析 技术迭代赋能场景 代理模式全新落地
大数据·人工智能·代理模式
阿猿收手吧!14 天前
【C++】建造者与代理模式实战解析
开发语言·c++·代理模式
Real-Staok15 天前
(集合)C / C++ 设计模式综合
单例模式·设计模式·代理模式