AOP

 

先介绍一下Spring AOP的一些术语(来自Spring实战第四版):

1.横切关注点:软件开发中,散布于应用多处的功能被称为横切关注点(这些横切关注点概念上是与应用业务逻辑相分离的)。

2.切面:横切关注点可以被模块化为特殊的类,被称为切面(aspect)。切面是通知和切点的结合。通知和切点共同定义了切面的全部内容 ——它是什么,在何时和何处完成其功能。

3.通知(Advice):AOP术语中,切面的工作被称为通知,通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。

           通知包括5种类型的通知:前置通知(Before),后置通知(After),返回通知(After-returning),异常通知(After-throwing),环绕通知(Around)。

4.连接点(Join point):连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。

切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

5.切点(Pointcut)一个切面并不需要通知应用的所有连接点。切点有助于缩小切面所通知的连接点的范围。切点的定义会匹配通知所要织入的一个或多个连接点。

我们通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。

6.引入(Aspect)引入允许我们向现有的类添加新方法或属性。

7.织入(Weaving)织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。

在目标对象的生命周期里有多个点可以进行织入:编译期,类加载期运行期Spring AOP 就是在运行期织入切面的。

 

看着上面这些术语,实在是让人有些难解。我大概用一个例子解释一下:

国庆节收假,高一(1)班班主任说话了:“班长,把没有写完语文作业的同学,都叫来我办公室喝茶!”

在这里,我们的主业务逻辑就是上课,每一个童鞋都是潜在的目标,也就是连接点,没有写完语文作业把范围右缩小了一些(毕竟还是有人写作业的),

也就是切入点是没有写完语文作业,缩小了连接点的范围。接下来“喝茶”就是重点,“喝茶”就相当于通知,可以在上课前,可以在下课。

那么我们所说的切面就是切入点+通知(没有写完语文作业的都给我过来喝茶!)

 

再类比到我们的业务类中,因为Spring基于动态代理,所以Spring只支持方法连接点。意味着我们业务中的所有方法都可以作为连接点,

但是我们并不需要在所有的方法执行前后都加一些与主业务逻辑无关的东西,所以切点的作用就是缩小连接点的范围,它定义了通知被应用到的具体的连接点的位置。

(附一张Spring实战第四版中的图)

                                                                                                                         

 

 

posted @ 2019-10-11 15:48  123xp  阅读(364)  评论(0编辑  收藏  举报