Spring(7)AOP的相关概念(二)
一、Spring中AOP的细节
1.AOP相关术语
(1)Joinpoint(连接点):
所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。
(2)Pointcut( 切入点):
所谓的切入点是指我们要对那些Joinpoint进行拦截的定义。
(3)Advice( 通知/ 增强):
所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。它根据在代理对象真实方法调用前、后的顺序和逻辑区分。
通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。
- 前置通知(before):在动态代理反射原有对象方法或者执行环绕通知前执行的通知功能。
- 后置通知(after):在动态代理反射原有对象方法或者执行环绕通知后执行的通知功能。无论是否抛出异常,它都会被执行。
- 最终通知(afterReturning):在动态代理反射原有对象方法或者执行环绕通知后正常返回(无异常)执行的通知功能。
- 异常通知(afterThrowing):在动态代理反射原有对象方法或者执行环绕通知产生的异常后执行的通知功能。
- 环绕通知(around):在动态代理中,它可以取代当前被拦截对象的方法,提供回调原有被拦截对象的方法。
(4)Introduction( 引入):
引入是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或者filed。
(5)Target( 目标对象):
代理的目标对象。
(6)Weaving( 织入):
指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
(7)Proxy(代理):
一个类被 AOP 织入增强后,就产生一个结果代理类。
(8)Aspect( 切面):
是切入点和通知(引介)的结合。
2.Spring对AOP的支持
AOP并不是Spring框架特有的,Spring只是支持AOP编程的框架之一。每一个框架对AOP的支持各有特点,有些AOP能够对方法的参数进行拦截,有些AOP对方法进行拦截,而Spring AOP是一种基于方法拦截的AOP。在Spring中有4种方法去实现AOP的拦截功能。
- 使用ProxyFactoryBean和对应的接口实现AOP。
- 使用XML配置AOP
- 使用@AspectJ注解驱动切面
- 使用AspectJ注入切面
在Spring AOP的拦截方式中,常用的是@AspectJ注解的方式和XML配置实现切面的。对剩下的那两种实现方式目前已经很少使用了。