面向切面编程(Aspect-Oriented Programming, AOP)把「散落在各个方法里的横切逻辑」抽成独立的切面,再由容器在运行期织入目标方法。Spring 的声明式事务、日志、鉴权、限流,底层都是它。
1. 为什么需要 AOP
先看一个问题:给所有业务方法加「耗时统计 + 审计日志」,不改的话会变成这样:
public void createOrder(OrderCmd cmd) {
long start = System.currentTimeMillis(); // 横切
log.info("audit: createOrder, user={}", userId); // 横切
try {
// ... 真正的业务
} finally {
log.info("cost={}ms", System.currentTimeMillis() - start); // 横切
}
}