AOP
AOP:面向切面编程,是对OOP的补充,不改变目标代码方法的前提,增强目标方法
OOP:面向对象编程
那么就可以知道,AOP是OOP的延续,是Spring框架中的一个重要内容,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP的理想运行图如下:
即,在不修改源代码的情况下,给程序统一添加额外功能的一种技术。
使用场景
那么根据AOP的特性,可以猜出AOP的使用场景
- 事务控制
- 日志记录
- 权限控制
- 性能分析
- 缓存
Spring框架有两大核心:
- IOC/DI:依赖对象之间的解耦
- AOP:目标类与增强类的解耦,横切面的解耦
总结
AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。
主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
AOP的配置--基于XML文件配置
切入点表达式: 方法签名描述
方法签名: 访问修饰符 返回值类型 [包.类.]方法名(参数列名) throws 异常声明;
语法:
execution(修饰符? 返回值 方法名(参数) 异常?)
注意:
?: 0或者1个
通配符:
*
: 任意 返回值, 方法名, 类名
..
: 任意 包中使用:..
: 表示该包,以及该包后代包 参数:..
: 任意个数,任意类型的参数
AOP配置-基于注解
在增强方法上提供相关的注解:
@Before: 前置增强配置
@AfterThrowing: 异常增强配置
@AfterReturning: 后置增强配置
@After: 最终增强配置
@Around: 环绕增强配置
@Aspect: 标记类是一个通知类