一、AOP 概念
Joinpoint:它定义在哪里加入你的逻辑功能,对于 Spring AOP,Jointpoint
指的就是 Method。
Advice:特定的 Jointpoint 处运行的代码,对于 Spring AOP 来讲,有
Before
advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodI
nteceptor)等。
Pointcut:一组 Joinpoint,就是说一个 Advice 可能在多个地方织入,
Aspect:这个我一直迷惑,它实际是 Advice 和 Pointcut 的组合,但是
Spring AOP 中的 Advisor 也是这样一个东西,但是 Spring 中为什么叫
Advisor 而不叫做 Aspect。
Weaving:将 Aspect 加入到程序代码的过程,对于 Spring AOP,由
ProxyFactory 或者 ProxyFactoryBean 负责织入动作。
Target:这个很容易理解,就是需要 Aspect 功能的对象。
Introduction:引入,就是向对象中加入新的属性或方法,一般是一个实例一
个引用对象。当然如果不引入属性或者引入的属性做了线程安全性处理或者只
读属性,则一个 Class 一个引用也是可以的(自己理解)。Per-class
lifecycle or per-instance life cycle
二、AOP 种类
1、静态织入:指在编译时期就织入 Aspect 代码,AspectJ 好像是这样做的。
2、动态织入:在运行时期织入,Spring AOP 属于动态织入,动态织入又分静
动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的
中间状态来决定如何操作,每次调用 Target 的时候都执行(性能较差)。
三、Spring AOP 代理原理
Spring AOP 是使用代理来完成的,Spring 会使用下面两种方式的其中一种来
创建代理:
1、JDK 动态代理,特点只能代理接口,性能相对较差,需要设定一组代理接口。
2、CGLIB 代理,可代理接口和类(+nal method 除外),性能较高(生成字
节码)。
四、Spring AOP 通知类型
1、BeforeAdvice:前置通知需实现 MethodBeforeAdvice,但是该接口的