Spring AOP(面向切面)

1. 前言

大家好,本小节重点介绍一个新知识 —— AOP 。作为入门的第一小节,我们需要理解 AOP 的概念,了解 AOP 的专业术语,明白它的作用。

那么,到底什么是 AOP ,它存在的意义是什么,在开发中扮演了一个什么样的角色呢?

随着疑问,开始本小节的内容。

2. 概述

2.1 AOP 的概念

AOP 并不是 Spring 框架的专属名称,它的全称是 Aspect Oriented Programming ,意为:面向切面编程。

它是 OOP 的一个延续,通过预编译的方式和运行期间动态代理实现程序功能的统一维护的一种技术。

名词解释:

面向切面编程:

​ 其实切面是数学中的一个概念,表示只有一个点接触到球体的一个平面称呼为切面,而接触点称呼为切点。那么在 Spring 中,切面编程指的是什么呢?

就是在程序运行某个方法的时候,不修改原始执行代码逻辑,由程序动态地执行某些额外的功能,对原有的方法做增强,这就叫做面向切面编程。

那个被监测的执行方法,称之为切入点。

2.2 AOP 的意义

我们明白了 AOP 的概念,它是一种编程设计模式,是一种编程技术,那么为什么在程序中使用它呢?

  1. Spring 框架的中心宗旨之一是非侵入性,使用 AOP 可以很方便地在某些场景实现特定的功能,通过修改配置即可以实现增加或者去除某些附加功能;
  2. AOP 设计的功能代码可以复用,代码耦合性更低,代码更加整洁;
  3. 使用 Spring 提供的 AOP ,让我们更加注重业务代码实现本身,而无需关注底层设计模式与实现方式。

3. 术语解释

3.1 Join point(连接点)

所谓连接点是指那些被拦截到的点。在 Spring 中这些点指的是方法,可以看作正在访问的,或者等待访问的那些需要被增强功能的方法。Spring 只支持方法类型的连接点。

3.2 Pointcut(切入点)

所谓切入点是一个规则,定义了我们要对哪些 Joinpoint 进行拦截。因为在一个程序中会存在很多的类,每个类又存在很多的方法,而哪些方法会应用 AOP 对该方法做功能增强呢?

这就需要依据我们配置的切入点规则。

3.3 Advice(通知)

所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。 也就是对方法做的增强功能。

通知分类

  1. 前置通知:在连接点之前运行的通知类型,它不会阻止流程进行到连接点,只是在到达连接点之前运行该通知内的行为,当然 -—— 除非它引发异常;
  2. 后置通知:在连接点正常完成后要运行的通知,正常的连接点逻辑执行完,会运行该通知,当然 —— 方法正常返回而没有引发异常;
  3. 最终通知:无论连接点执行后的结果如何,正常还是异常,都会执行的通知;
  4. 异常通知:如果连接点执行因抛出异常而退出,则执行此通知;
  5. 环绕通知:环绕通知可以在方法调用之前和之后执行自定义行为。

3.4 Target (目标)

Target 指的是代理的目标对象,更通俗的解释就是:AOP 对连接点方法做增强,底层是代理模式生成连接点所在类的代理对象,那么连接点所在的类,就是被代理的类称呼为 Target。

3.5 Aspect(切面)

切面本质是一个类,只不过是个功能类,作为整合 AOP 的切入点和通知。一般来讲,需要在 Spring 的配置文件中配置,或者通过注解来配置。

3.6 Weaving(织入)

织入是一种动作的描述,在程序运行时将增强的功能代码也就是通知,根据通知的类型(前缀后缀等…)放到对应的位置,生成代理对象。

3.7 Proxy(代理)

一个类被 AOP 织入增强后,产生的结果就是代理类

4. 小结

本小节主要是 AOP 的入门介绍,那么重点给大家讲述了 AOP 的概念、意义、以及常见术语。

当然对于初学者而言,文字描述略显苍白和枯燥,而我们本小节目的也是给大家做个铺垫,

对一些名词做个解释和介绍,以便后续测试案例的讲解。