AOP设计的初衷
- DRY:Don’t Repeat Yourself,减少重复代码;
- SoC:Separation of Concerns,关注分离;
- 水平分离:展示层 --> 服务层 --> 持久层
- 垂直分离:模块之间分离;
- 切面分离:功能性需求与非功能性需求分离;
使用AOP的好处
- 集中处理某一关注点/横切逻辑
- 可以很方便的添加/删除关注点
- 侵入性少,增强代码可读性以及可维护性
AOP应用场景
- 权限控制;
- 缓存控制;
- 事务控制;
- 审计日志;
- 性能监控;
- 分布式追踪;
- 异常处理;
AOP术语介绍
- 通知(Advice):简单的说就是你想要的功能,预先定义好这些功能,然后应用在你想要用的地方;
- 连接点(JoinPoint):spring允许你使用通知(Advice)的地方,通常可以是:每个方法调用的前后、抛出异常时等;
- 切入点(PointCut):切入点是建立在连接点基础上的,例如有十个方法,每个方法的调用前后等都是连接点,但你只想在某个方法的调用前织入通知,那么就可以使用切点来定义这个方法。通过切点对连接点进行定义,从而筛选出你想要织入通知的连接点;
- 切面(Aspect):切面是通知和切点的结合。通知定义了什么时候干什么事,切点定义了在哪干,通知和切点共同组成了完整的切面;
- 引入(Introduction):允许我们向现有的类中添加新的方法。结合上面的几个术语,其实就是将切面应用到具体的