Spring AOP就是这么简单啦 (2)

而Spring借鉴了AspectJ很多非常有用的做法,融合了AspectJ实现AOP的功能。但Spring AOP本质上底层还是动态代理,所以Spring AOP是不需要有专门的编辑器的~

1.4AOP的术语

嗯,AOP搞了好几个术语出来~~两本书都有讲解这些术语,我会尽量让大家看得明白的:

连接点(Join point):

能够被拦截的地方:Spring AOP是基于动态代理的,所以是方法拦截的。每个成员方法都可以称之为连接点~

切点(Poincut):

具体定位的连接点:上面也说了,每个方法都可以称之为连接点,我们具体定位到某一个方法就成为切点

增强/通知(Advice):

表示添加到切点的一段逻辑代码,并定位连接点的方位信息

简单来说就定义了是干什么的,具体是在哪干

Spring AOP提供了5种Advice类型给我们:前置、后置、返回、异常、环绕给我们使用!

织入(Weaving):

将增强/通知添加到目标类的具体连接点上的过程。

引入/引介(Introduction):

引入/引介允许我们向现有的类添加新方法或属性。是一种特殊的增强!

切面(Aspect):

切面由切点和增强/通知组成,它既包括了横切逻辑的定义、也包括了连接点的定义。

在《Spring 实战 (第4版)》给出的总结是这样子的:

通知/增强包含了需要用于多个应用对象的横切行为;连接点是程序执行过程中能够应用通知的所有点;切点定义了通知/增强被应用的具体位置。其中关键的是切点定义了哪些连接点会得到通知/增强。

总的来说:

这些术语可能翻译过来不太好理解,但对我们正常使用AOP的话影响并没有那么大~~看多了就知道它是什么意思了。

1.5Spring对AOP的支持

Spring提供了3种类型的AOP支持:

基于代理的经典SpringAOP

需要实现接口,手动创建代理

纯POJO切面

使用XML配置,aop命名空间

@AspectJ注解驱动的切面

使用注解的方式,这是最简洁和最方便的!

二、基于代理的经典SpringAOP

这部分配置比较麻烦,用起来也很麻烦,这里我就主要整理一下书上的内容,大家看看了解一下吧,我们实际上使用Spring AOP基本不用这种方式了!

首先,我们来看一下增强接口的继承关系图:

Spring AOP就是这么简单啦

可以分成五类增强的方式:

Spring AOP就是这么简单啦

Spring提供了六种的切点类型

Spring AOP就是这么简单啦

切面类型主要分成了三种

一般切面

切点切面

引介/引入切面

Spring AOP就是这么简单啦

一般切面,切点切面,引介/引入切面介绍:

Spring AOP就是这么简单啦


Spring AOP就是这么简单啦

对于切点切面我们一般都是直接用就好了,我们来看看引介/引入切面是怎么一回事:

引介/引入切面是引介/引入增强的封装器,通过引介/引入切面,可以更容易地为现有对象添加任何接口的实现

继承关系图:

Spring AOP就是这么简单啦

引介/引入切面有两个实现类:

DefaultIntroductionAdvisor:常用的实现类

DeclareParentsAdvisor:用于实现AspectJ语言的DeclareParent注解表示的引介/引入切面

实际上,我们使用AOP往往是Spring内部使用BeanPostProcessor帮我们创建代理

这些代理的创建器可以分成三类:

基于Bean配置名规则的自动代理创建器:BeanNameAutoProxyCreator

基于Advisor匹配机制的自动代理创建器:它会对容器所有的Advisor进行扫描,实现类为DefaultAdvisorAutoProxyCreator

基于Bean中的AspectJ注解标签的自动代理创建器:AnnotationAwareAspectJAutoProxyCreator

对应的类继承图:

Spring AOP就是这么简单啦

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsffz.html