spring AOP
1.前言
AOP 提供一种通用的扩展机制,在业务操作前后提供一些切面的操作,这些操作通常是和业务无关的,例如:日志记录、性能统计、安全控制、事务处理、异常处理等。一个目标类可以被多个切面切入,多个切面也可以切入一个目标类。切面实现的本质是一个或多个基于连接点的拦截器。
Spring AOP 底层是基于动态代理实现的,对实现接口的类进行代理,默认使用 JDK 动态代理,对没实现接口的类,使用 CGLIB 动态代理。Spring AOP 中的目标类不管有没有实现接口,都可以通过配置来强制使用 CGLIB 代理方式--->>>@EnableAspectJAutoProxy(proxyTargetClass = true)
2.术语
- Aspect(切面):切入一个或多个类的模块
- Join point(连接点):程序执行的节点,例如执行方法或处理异常
- Advice(通知):切面在连接点执行的动作,例如前置通知
- Pointcut(切点):用于匹配连接点,一般通过表达式匹配
- Target object(目标对象):被切入的对象,可以被一个或多个切面切入
3.通知类型
4.AOP 使用方式
- 1.XML配置
- 2.注解形式
- 3.Advisor代码形式
5.常用注解
6.通知的执行顺序
1.单个切面
2.多个切面
- 多个切面可通Order注解控制切面的整体执行顺序
- 多个切面各个增强顺序如何?
- 即:先执行切面order(1)的连接点执行前的增强,然后执行order(2)连接点执行前的增强,再执行order(2)连接点执行后的增强,再执行order(1)连接点执行后的增强
- 即:先执行切面order(1)的连接点执行前的增强,然后执行order(2)连接点执行前的增强,再执行order(2)连接点执行后的增强,再执行order(1)连接点执行后的增强