AOP
AOP(Aspect-Oriented Programming,面向切面编程)是对 OOP 的补充,用于将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,集中管理。典型横切关注点包括:日志记录、事务管理、权限校验、性能监控、缓存、同步等——这些逻辑如果分散在每个方法里,既冗余又难以维护。 AOP 实际是 GoF 设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP 可以说也是这种目标的一种实现。 AOP 解决了什么问题 在没有 AOP 的情况下,每个业务方法都要亲自处理横切逻辑: // 没有 AOP:每个方法都要重复写日志、事务、权限检查 public User findById(Long id) { log.info("开始查询 user={}", id); // 日志 checkPermission("user:read"); // 权限 Transaction tx = db.beginTransaction(); // 事务 try { User user = db.query(id); // 真正的业务逻辑 tx.commit(); return user; } catch (Exception e) { tx.rollback(); throw e; } finally { log.info("查询结束"); // 日志 } } 这带来三个问题: ...