面向切面编程
AOP想解决的问题是什么
DRY : Don’t Repeat Yourself 简化代码
SOC : Separation of Concerns关注点分离
- 水平分离 : MVC 架构
- 垂直分离 : 模块划分(订单, 库存等)
- 切面分离 : 分离功能性需求与非功能性需求
使用AOP的好处
1.集中处理某一关注点/横切逻辑
2.可以很方便地添加/删除关注点
3.增加代码的可读性,可维护性
使用AOP的方式
- 注解
- XML配置的方式
AOP的应用场景
- 权限控制
- 缓存控制
- 事务控制
- 审计日志
- 性能监控
- 分布式追踪
- 异常处理
底层原理
Spring AOP的底层原理就是动态代理!
Spring AOP使用纯Java实现,它不需要专门的编译过程,也不需要特殊的类装载器,它在运行期通过代理方式向目标类织入增强代码。在Spring中可以无缝地将Spring AOP、IoC和AspectJ整合在一起。
在Java中动态代理的两种方式:
- JDK动态代理
- CGLib动态代理
JDK动态代理是需要实现某个接口 了,而我们类未必全部会有接口,于是就有CGLib代理
如果是单例的我们最好使用CGLib代理,如果是多例的我们最好使用JDK代理