Spring框架下的AOP



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

OOP中的模块化关键单元是类,而在AOP中,模块化单元是方面。依赖注入帮助你解耦应用程序对象,而AOP帮助你解耦与之相关的横切关注点。AOP就像Perl、.NET、Java等编程语言中的触发器。

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

AOP术语

在我们开始使用AOP之前,让我们熟悉AOP的概念和术语。这些术语并非Spring特有的,而是与AOP相关的。

序号 术语与描述
1

方面

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

2

连接点

这表示可以在应用程序中插入AOP方面的位置。你也可以说,这是应用程序中使用Spring AOP框架执行操作的实际位置。

3

通知

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

4

切点

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

5

引入

引入允许你向现有类添加新的方法或属性。

6

目标对象

被一个或多个方面建议的对象。此对象始终是代理对象,也称为建议对象。

7

织入

织入是将方面与其他应用程序类型或对象链接以创建建议对象的进程。这可以在编译时、加载时或运行时完成。

通知类型

Spring方面可以与以下五种通知一起使用:

序号 通知与描述
1

before

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

2

after

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

3

after-returning

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

4

after-throwing

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

5

around

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

自定义方面实现

Spring支持@AspectJ注解样式方法和基于模式的方法来实现自定义方面。以下部分详细解释了这两种方法。

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

方面是使用常规类以及基于XML的配置来实现的。

2 基于@AspectJ的

@AspectJ是指将方面声明为使用Java 5注解进行注释的常规Java类的一种样式。

广告