Skip to content

Spring AOP API (Spring AOP APIs)

前一章描述了 Spring 对使用 @AspectJ 和基于 XML Schema 的切面定义的 AOP 支持。在本章中,我们将讨论底层的 Spring AOP API。对于大多数通用的应用程序,我们推荐按照前一章所述,使用带有 AspectJ 切入点表达式的 Spring AOP。

章节摘要


补充教学

1. 为什么还要学习底层 API?

在现代 Spring 开发中,我们绝大多数时间都在写 @Aspect@Around。既然官方推荐使用声明式 AOP,那学习这些底层接口还有意义吗?

  • 理解底层原理:无论你用的是注解还是 XML,Spring 最终都会将它们解析为底层的 PointcutAdviceAdvisor。掌握这些 API 是从“面试八股文”进阶到“底层架构师”的必经之路。
  • 框架开发与中间件:如果你正在编写一个 Spring Boot Starter,或者需要动态地根据配置为某些类添加日志、安全检查,编程式的 ProxyFactory 比注解更灵活。
  • 解决复杂场景:有些极致的动态需求(如根据运行时权限动态改变拦截逻辑)通过静态注解很难表达,此时底层 API 就是你的瑞士军刀。

2. 核心概念地图

为了防止在后续细节中迷失,请记住这三个核心角色的关系:

  1. Advice (通知)做什么。包含具体的拦截逻辑(如日志打印、事务开启)。
  2. Pointcut (切入点)在哪里做。定义了哪些类、哪些方法应该被拦截。
  3. Advisor (切面/向导)组合者。它将一个 Advice 和一个 Pointcut 绑定在一起。在 Spring 中,一个 Advisor 就是一个最简单的“切面”。

3. 如何阅读本章

  • 如果你是应用开发者:重点关注 ProxyFactory自动代理,这些在编写测试或动态工具类时最常用。
  • 如果你是中间件/框架开发者:你需要精通 Pointcut APITargetSource,后者允许你实现极其强大的功能,如池化对象代理、热插拔代理目标等。

Based on Spring Framework.