我们看下Spring给我们提供了哪些基础组件(AspectJ相关Aop支持单独一篇介绍),大家看之前,要明白先有规范,再有实现。

提示:
    生成代理对象生成用到的AOP组件,见第一篇<<Spring-IoC基础设施介绍>>中有介绍。

一.核心组件

1.Joinpoint

Joinpoint:织入操作的系统执行点。在Spring AOP落地过程中,用于协调横切逻辑(Advice)执行和目标方法执行。

查看大图

Joinponit类图

2.Pointcut

(a).Pointcut:用于描述Joinpoint集合。其通过对类(ClassFilter)和方法(MethodMatcher)的描述来表达。

查看大图

Pointcut类图

(b).ClassFilter:描述符合织入逻辑类的特征,验证当前类是否匹配;

查看大图

ClassFliter类图

(c).MethodMatcher:描述符合织入逻辑方法的特征,验证当前方法是否匹配;

查看大图

MethodMatcher类图

3.Advice

提示:
    Advice分两种类型:
        1.per-class类型的Advice:该类型的Advice的实例可以在目标对象类的
        所有实例之间共享
        ---我们把这种类型的作为学习的重点
        2.per-instance类型的Advice不会在目标类所有对象实例之间共享,而是
        会为不同的实例对象保存它们各自的状态以及相关逻辑。

(a).per-class类型的Advice:

查看大图

per-class类型的Advice类图

(b).per-instance类型的Advice类图:

查看大图

per-instance类型的Advice类图

4.Advisor

Advisor:可以理解为对应AOP规范的Aspect的概念,包含了织入逻辑(Advice)和Pointcut。

(a).per-class类型的Advisor:

查看大图

per-class类型的Advisor类图

(a).per-instance类型的Advisor:

查看大图

per-instance类型的Advisor类图

二.其他组件支持

Joinponit,Pointcut,Advice,Advisor(与Aspect对应)都是AOP规范中对应的最基础的概念,真正工程落地,还需要其他组件支持。以下分别描述:

1.AdvisorAdapter

Spring中各种通知最终都是通过环绕通知(MethodInterceptor)来实现的。所以就需要一个中间角色,在持有各种通知的Advisor在提取织入逻辑时,统一把通知转换为环绕通知(MethodInterceptor),而AdvisorAdapter就是承担这一角色的。我们看下它的类图:

查看大图

AdvisorAdapter类图

2.AdvisedSupport

在生成代理与代理运行时,需要像:目标对象,生成代理方式,Class信息,织入逻辑,切点描述等大量的参数,如果参数分别传递,则方法一方面失去了扩展性,另一方面可读性也较差,所以需要一个维护AOP上下文环境的对象,AdvisedSupport就是承担这一角色的,类图如下:

查看大图

AdvisedSupport类图

有了以上基础组件的支持,我们就看看Spring是具体如何使用这些组件的。我们先从代理生成时,如何查找Bean适用的Advisor,那我们进入下一篇:代理生成中如何查找Bean适用的Advisor

附录:

  1. 顶层鸟瞰AOP相关类之间关系

快速导航: