Aspect Oriented Programming with Spring
面向切面的编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象的编程(OOP)。OOP 中模块化的关键单位是 类,而 AOP 中模块化的单位是 切面。切面使跨越多种类型和 对象的关注点(如事务管理)模块化。(这样的关注点在 AOP 文献中通常被称为 「交叉(crosscutting)」关注点)。
Spring 的关键组件之一是 AOP 框架。虽然 Spring IoC 容器并不依赖于 AOP(意味着如果你不想使用 AOP,就不需要使用 AOP),但 AOP 补充了 Spring IoC,提供了一个非常有能力的中间件解决方案。
:::info Spring AOP with AspectJ pointcuts / 带有 AspectJ 切入点的 Spring AOP
Spring 通过使用基于 XML 或 @AspectJ 注解风格,提供了简单而强大的编写自定义切面的方法。这两种风格都提供了完全类型化的 advice,并使用 AspectJ 的 pointcut,同时仍然使用 Spring AOP 进行编织。
本章讨论了基于 XML 和 @AspectJ 的 AOP 支持。下一章将讨论低级别的 AOP 支持。 :::
AOP 在 Spring 框架中被用来:
- 提供声明式的企业服务。最重要的此类服务是 声明式事务管理。
- 让用户实现自定义切面,用 AOP 补充他们对 OOP 的使用。
:::info 如果你只对通用声明式服务或其他预先包装好的声明式中间件服务(如池)感兴趣,你就不需要直接使用 Spring AOP,可以跳过本章的大部分内容。 :::