Spring AOP 详解
一、概述
AOP:
⾯向切⾯编程,让程序员关注于类中方法的某个切点上
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
默认情况下,Spring 会根据被代理对象是否实现接⼝来选择使⽤ JDK 还是 CGLIB。当被代理对象没有实现 任何接⼝时,Spring 会选择 CGLIB。当被代理对象实现了接⼝,Spring 会选择 JDK 官⽅的代理技术,不过 我们可以通过配置的⽅式,让 Spring 强制使⽤ CGLIB。
- 通知(Advice):通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题
- 前置通知(@Before):在目标方法被调用之前调用通知功能
- 后置通知(@After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么
- 返回通知(@AfterReturning):在目标方法成功执行之后调用通知
- 异常通知(@AfterThrowing):在目标方法抛出异常后调用通知
- 环绕通知(@Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
- 连接点(Joinpoint):要增强代码的地方(方法开始、结束、异常时等时机点)。只是候选点,最终是否增强代码得看后续逻辑
- 切点(Pointcut):已经把增强代码加入到业务主线之后的连接点
- 引入:引入允许我们向现有的类添加新方法或属性
- 织入(Weaving):把增强应用到目标对象老创建新的代理对象的过程。Spring 采用动态代理织入,而 Aspect 采用编译期织入和类装载期织入
- 切面(Aspect):切面 = 通知 + 切点。通知和切点共同定义了切面的全部内容
1 | <dependency> |