Spring 框架中的 AOP

什么是 AOP

AOP:全称 Aspect oriented programming,即 面向方面编程。面向方面的编程需要将程序逻辑分解成不同的部分,称为所谓的关注点。 跨越应用程序多个点的功能称为横切关注点,这些横切关注点在概念上与应用程序的业务逻辑分开。 在日志记录、审计、声明性事务、安全性、缓存等方面有很好的说明。

Spring 框架的一个关键组件是面向切面的编程(AOP)框架。

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

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


AOP 术语

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

序号 术语 描述
1 Aspect 一个模块具有一组提供横切需求的 APIs。例如,一个日志模块为了记录日志将被 AOP 方面调用。应用程序可以拥有任意数量的方面,这取决于需求。
2 Join point 在你的应用程序中它代表一个点,你可以在插件 AOP 方面。你也能说,它是在实际的应用程序中,其中一个操作将使用 Spring AOP 框架。
3 Advice 这是实际行动之前或之后执行的方法。这是在程序执行期间通过 Spring AOP 框架实际被调用的代码。
4 Pointcut 这是一组一个或多个连接点,通知应该被执行。你可以使用表达式或模式指定切入点正如我们将在 AOP 的例子中看到的。
5 Introduction 引用允许你添加新方法或属性到现有的类中。
6 Target object 被一个或者多个方面所通知的对象,这个对象永远是一个被代理对象。也称为被通知对象。
7 Weaving Weaving 把方面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时,类加载时和运行时完成。

声明的类型

Spring 方面可以使用以下五种声明

序号 声明 描述
1 前置声明 在一个方法执行之前,执行声明。
2 后置声明 在一个方法执行之后,不考虑其结果,执行声明。
3 返回后声明 在一个方法执行之后,只有在方法成功完成时,才能执行声明。
4 抛出异常后声明 在一个方法执行之后,只有在方法退出抛出异常时,才能执行声明。
5 环绕声明 在建议方法调用之前和之后,执行声明。

实现自定义方面

Spring 支持 @AspectJ annotation style 方法和基于模式的方法来实现自定义方面。 这两种方法已在以下各节中详细说明。

序号 方法 描述
1 XML Schema based 方面是使用常规类以及基于配置的 XML 来实现的。
2 @AspectJ based @AspectJ 引用一种声明方面的风格作为带有 Java 5 注释的常规 Java 类注释。

查看笔记

扫码一下
查看教程更方便