面向切面编程(AOP)是面向对象编程(OOP)的补充,它提供了另一种关于程序结构的思考方式。OOP中模块化的关键单元是类,而在AOP中,模块化单元是切面。切面支持跨多个类型和对象的关注点(如事务管理)的模块化。(在AOP文献中,此类关注点通常被称为“横切”关注点。)

Spring的关键组件之一是AOP框架。虽然springioc容器不依赖于AOP(这意味着如果您不想使用AOP,就不需要使用AOP),AOP补充了springioc,以提供一个非常强大的中间件解决方案。

使用AspectJ切入点的Spring AOP

Spring通过使用基于模式的方法或@AspectJ注释样式,提供了编写自定义方面的简单而强大的方法。这两种风格都提供了完整类型的建议和AspectJ切入点语言的使用,同时仍然使用springaop进行编织。
本章讨论基于模式和@AspectJ的AOP支持。下一章将讨论较低级别的AOP支持。

在Spring框架中,AOP用于:
提供声明性企业服务。最重要的此类服务是声明性事务管理。
让用户实现自定义切面,用AOP补充他们对OOP的使用。

如果您只对通用声明性服务或其他预打包的声明性中间件服务(如池)感兴趣,则无需直接使用springaop,可以跳过本章的大部分内容。

5.1 AOP概念

让我们从定义一些中心AOP概念和术语开始。这些术语不是针对Spring的。不幸的是,AOP不是很直观的术语。然而,如果Spring使用自己的术语,则会更加令人困惑。

  • 切面:跨越多个类的关注点的模块化。事务管理是企业Java应用程序中横切关注点的一个很好的例子。在springaop中,方面是通过使用常规类(基于模式的方法)或用@Aspect注释(@AspectJ样式)注释的常规类来实现的。