
Java 动态代理概述
在 Java 开发中,代理模式是设计模式之一,而动态代理作为代理模式的进阶形式,在框架开发(如 Spring AOP)、日志记录、权限控制等场景中发挥着关键作用。本文将从核心概念出发,拆解两种主流动态代理的实现逻辑,并分析其适用场景。

一、动态代理的核心概念
动态代理指在程序运行时,通过反射机制动态生成代理类,而非在编译期预先定义。其核心价值在于:无需为每个目标类手动编写代理类,即可统一为多个目标类添加横切逻辑(如日志、事务、异常处理),降低代码耦合度。

动态代理包含三个核心角色:
- 目标类(Target):被代理的原始类,包含核心业务逻辑;
- 代理类(Proxy):运行时动态生成的类,持有目标类引用,负责调用目标方法并增强逻辑;
- 增强逻辑(Advice):需统一添加的横切逻辑,如日志打印、参数校验等。
形象解释

二、两种主流动态代理实现
Java 中动态代理主要有两种实现方式:JDK 动态代理(原生 API)和 CGLIB 动态代理(第三方库),二者在原理和使用上存在显著差异。
1. JDK 动态代理(基于接口)
原理
JDK 动态代理依赖 java.lang.reflect 包下的 Proxy 和 InvocationHandler 接口,要求目标类必须实现至少一个接口。运行时,JVM 会动态生成一个实现目标接口的代理类,代理类的方法调用会转发到 InvocationHandler 的 invoke 方法中,在该方法中可嵌入增强逻辑并调用目标方法。



