AOP基础概念

一、AOP基础概念

AOP基础概念_第1张图片

二、Join point(连接点)

程序执行期间的某一个点,例如执行方法或处理异常时候的点。在 Spring AOP 中,连接点总是表示方法的执行。org.aspectj.lang.JoinPoint 接口表示目标类连接点对象,它定义这些主要方法。
AOP基础概念_第2张图片

org.aspectj.lang.ProceedingJoinPoint 继承了 JoinPoint 接口,它新增了两个方法(它们用于执行连接点方法)。
AOP基础概念_第3张图片

三、Advice(通知)

通知是指一个切面在特定的连接点要做的事情。通知分为方法执行前通知,方法执行后通知,环绕通知等。许多 AOP 框架(包括 Spring)都将通知建模为拦截器,在连接点周围维护一系列拦截器(形成拦截器链),对连接点的方法进行增强。

四、Pointcut(切点)

一个匹配连接点(Join point)的谓词表达式。通知(Advice)与切点表达式关联,并在切点匹配的任何连接点(Join point)(例如,执行具有特定名称的方法)上运行。切点是匹配连接点(Join point)的表达式的概念,是AOP的核心,并且 Spring 默认使用 AspectJ 作为切入点表达式语言。

支持在切点定义中加入以下运算符进行复合运算:
AOP基础概念_第4张图片

切点访问修饰符与类访问修饰符的性质是相同的,它可以决定切点可以在哪些类中可使用。因为命名切点仅利用方法名及访问修饰符的信息,所以一般定义方法的返回类型为 void ,并且方法体为空 。
AOP基础概念_第5张图片

五、Aspect(切面)

它是一个跨越多个类的模块化的关注点,它是通知(Advice)和切点(Pointcut)合起来的抽象,它定义了一个切点(Pointcut)用来匹配连接点(Join point),也就是需要对需要拦截的那些方法进行定义;它定义了一系列的通知(Advice)用来对拦截到的方法进行增强。

六、Target object(目标对象)

被一个或者多个切面(Aspect)通知的对象,也就是需要被 AOP 进行拦截对方法进行增强(使用通知)的对象,也称为被通知的对象。由于在 AOP 里面使用运行时代理,所以目标对象一直是被代理的对象。

七、AOP proxy(AOP 代理)

为了实现切面(Aspect)功能使用 AOP 框架创建一个对象,在 Spring 框架里面一个 AOP 代理要么指 JDK 动态代理,要么指 CgLIB 代理。

八、Weaving(织入)

是将切面应用到目标对象的过程,这个过程可以是在编译时(例如使用 AspectJ 编译器),类加载时,运行时完成。Spring AOP 和其它纯 Java AOP 框架一样,是在运行时执行植入。

一个连接点可以同时匹配多个切点,而切点所对应的增强在连接点上织入顺序的规则是这样的:
①如果在同一个切面类中声明的增强,则按照增强在切面类中定义的顺序进行织入;
②如果增强位于不同的切面类中,并且这些切面类都实现了org.springframework.core.Ordered 接口,则由 Ordered 方法的顺序号决定(顺序号小的先织入);
③如果增强位于不同的切面类中,但这些切面类没有实现org.springframework.core.Ordered 接口,织入的顺序是不确定的。

两个切面类 A 与 B,都实现了 Ordered 接口,A 的顺序号为 1,B 的顺序号为 2。切面类 A 与 B 都定义了 3 个增强,那么同时匹配这 6 个增强的织入顺序如下图所示:
AOP基础概念_第6张图片

九、Advisor

这个概念是从 Spring 1.2的 AOP 支持中提出的,一个 Advisor 相当于一个小型的切面,不同的是它只有一个通知(Advice),Advisor 在事务管理里面会经常遇到。

你可能感兴趣的:(AOP基础概念)