连接点(joinpoint):
程序执行的某个特定位置,如方法执行前,后。
Spring仅支持方法级别的连接点。
连接点由两个信息定位:1.用方法表示的程序的执行点;2.用相对点表示对的方位信息。
Spring使用切点对执行点进行定位,而方位信息则在增强类型中定义,
即:切点+增强中的方位信息=连接点
切点(pointcut):
用于定位特定的连接点,一个切点可以匹配多个连接点。
增强提供了连接点的方位信息,如方法的前后,而切点进一步描述织入到哪些类的哪些方法。
即:切点用于定位程序中的方法,即执行点。
增强(advice):
增强是织入到目标类连接点上的一段程序代码。
增强既包含了用于添加到连接点上的一段执行逻辑,又包含定位连接点的方位信息(所以Spring提供的增强接口都是带方位名的,如BeforeAdvice)。
结合增强中连接点的方位信息与切点信息,就可以定位到特定的连接点。
目标对象(target):
增强逻辑织入的目标类。
引介(introduction):
是一种特殊的增强,可以为目标类添加一些属性与方法。
织入(weaving):
织入是将增强逻辑添加到连接点上的过程。
织入有三种方式:
1,编译期织入
2,类装载期织入
3,动态代理织入,在运行期进行织入
Spring采用动态代理织入,分为:基于JDK的动态代理(只支持接口的代理,不支持类的代理),基于CGLib的动态代理(可以支持类的代理)
代理(proxy):
一个类被AOP织入增强后,产生的类即为代理类。
代理类融合了原类与增强逻辑。
根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能是原类的子类。
切面(aspect):
由切点和增强(引介)组成,既包含了横切逻辑的定义,又包含了连接点的定义。