我们仅列出Spring-AOP基础设施介绍-核心中不同的部分。

提示:
    AspectJ在使用Joinpoint时,没有变化,所以略去了;
    ---共享原有基础设施

一.核心组件

1.Pointcut

1.Pointcut:用于描述Joinpoint集合。具体匹配时委托给了aspectj类库处理。
查看大图

Pointcut-AspectJExpressionPointcut类图

2.Advice

查看大图

per-class类型的Advice类图

3.Advisor

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

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

查看大图

per-class类型的Advisor类图

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

查看大图

per-instance类型的Advisor类图

二.其他组件支持

同先前介绍的那样,在支持AspectJ类型声明的AOP时,也需要其他组件支持。以下分别描述:

1.AspectMetadata

当我们通过反射获取到标注@Aspect注解的类时,用于包装当前bean信息,作为进一步对Aspect处理的元数据。

查看大图

AspectMetadata类图

2.AspectInstanceFactory

当我们有了元数据,Spring为我们提供了AspectInstanceFactory用于操作元数据。
查看大图

AspectInstanceFactory类图

3.AspectJAdvisorFactory

现在我们就可以由Aspect元数据构建Advisor和Advice了,由AspectJAdvisorFactory负责。

查看大图

AspectJAdvisorFactory类图

4.BeanFactoryAspectJAdvisorsBuilder

BeanFactoryAspectJAdvisorsBuilder:在BeanFactory中检索使用@AspectJ
注解的bean并基于它们构建Spring Advisor,以用于自动代理。其整合了上面3个其他组件。

查看大图

BeanFactoryAspectJAdvisorsBuilder类图

那我们接下来看看Spring如何使用的:Spring-AOP整合Aspect介绍

快速导航: