在 Java 中,Proxy(代理) 和 AOP(面向切面编程) 密切相关,但二者不在同一个抽象层级。可以一句话概括:
Java 的 Proxy 是实现 AOP 的一种技术手段,而 AOP 是一种编程思想。
下面分层说明它们的关系。
代理 = 在不修改原对象代码的前提下,对其方法进行增强或控制。
Java 中常见的代理方式:
静态代理
JDK 动态代理
java.lang.reflect.ProxyProxy.newProxyInstance(
classLoader,
interfaces,
invocationHandler
);
CGLIB 代理
AOP(Aspect-Oriented Programming):
将横切逻辑(如日志、事务、权限)从业务代码中剥离。
AOP(思想)
│
├── 实现方式
│ ├── 动态代理(JDK / CGLIB)
│ ├── 字节码增强(ASM / ByteBuddy)
│ └── 编译期织入(AspectJ)
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.xxx.*.*(..))")
public void before() {
System.out.println("before");
}
}
底层等价于:
Proxy.newProxyInstance(
...,
new InvocationHandler() {
public Object invoke(...) {
before();
return method.invoke(target, args);
}
}
);
Proxy 是“术”,AOP 是“道”
Spring 用 Proxy 把 AOP 思想落地,但 AOP 的本质不是 Proxy。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。