使用 Spring 框架的 AOP

Spring Framework 的关键组件之一是面向切面的编程 (AOP) 框架。 面向切面的编程需要将程序逻辑分解成不同的部分,称为所谓的关注点。 跨越应用程序多个点的功能称为横切关注点,这些横切关注点在概念上与应用程序的业务逻辑分开。 在日志记录、审计、声明性事务、安全性、缓存等切面有各种常见的好例子。

OOP 中模块化的关键单元是类,而 AOP 中模块化的单元是切面。 依赖注入可帮助您将应用程序对象彼此分离,而 AOP 可帮助您将横切关注点与它们影响的对象分离。 AOP 就像 Perl、.NET、Java 等编程语言中的触发器。

Spring AOP 模块提供拦截器来拦截应用程序。 例如,在执行方法时,您可以在方法执行之前或之后添加额外的功能。


AOP 术语

在开始使用 AOP 之前,让我们先熟悉一下 AOP 的概念和术语。 这些术语并不特定于 Spring,而是与 AOP 相关。

序号 术语 & 描述
1

Aspect

这是一个模块,它具有一组提供横切要求的 API。 例如,日志记录模块将被称为 AOP 切面的日志记录。 根据要求,应用程序可以具有任意数量的切面。

2

Join point

这代表了您的应用程序中的一个点,您可以在其中插入 AOP 切面。 您也可以说,它是应用程序中使用 Spring AOP 框架执行操作的实际位置。

3

Advice

这是在方法执行之前或之后要采取的实际操作。 这是一段由 Spring AOP 框架在程序执行期间调用的实际代码。

4

Pointcut

这是应该执行通知的一组一个或多个连接点。 正如我们将在 AOP 示例中看到的那样,您可以使用表达式或模式指定切入点。

5

Introduction

Introduction 允许您向现有类添加新方法或属性。

6

Target object

一个或多个切面所通知的对象。 此对象将始终是代理对象,也称为通知对象。

7

Weaving

Weaving 是将切面与其他应用程序类型或对象链接以创建通知对象的过程。 这可以在编译时、加载时或运行时完成。


通知类型

Spring 切面可以使用以下五种通知 −

序号 通知 & 描述
1

before

在方法执行之前运行通知。

2

after

在方法执行后运行通知,无论其结果如何。

3

after-returning

仅当方法成功完成时,才在方法执行后运行通知。

4

after-throwing

仅当方法因抛出异常而退出时,才在方法执行后运行通知。

5

around

在调用建议方法之前和之后运行通知。


自定义切面实现

Spring 支持 @AspectJ annotation style 方法和 schema-based 方法来实现自定义切面。 这两种方法已在以下各节中详细说明。

序号 方法 & 描述
1 基于 XML 模式

切面是使用常规类和基于 XML 的配置来实现的。

2 基于@AspectJ

@AspectJ 指的是一种将切面声明为使用 Java 5 注解进行注解的常规 Java 类的风格。