此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

Spring AOP 功能和目标

Spring AOP 是用纯 Java 实现的。无需特殊编译 过程。Spring AOP 不需要控制类加载器层次结构,因此 适用于 Servlet 容器或应用程序服务器。spring-doc.cadn.net.cn

Spring AOP 目前仅支持方法执行连接点(建议执行 Spring bean 上的方法)。未实现现场拦截,但支持 可以在不破坏核心 Spring AOP API 的情况下添加字段拦截。如果您需要 要建议字段访问和更新连接点,请考虑使用诸如 AspectJ 之类的语言。spring-doc.cadn.net.cn

Spring AOP 的 AOP 方法与大多数其他 AOP 框架不同。目的是 不提供最完整的AOP实现(虽然Spring AOP相当 有能力)。相反,目的是在 AOP 实施和 Spring IoC,帮助解决企业应用中的常见问题。spring-doc.cadn.net.cn

因此,例如,Spring 框架的 AOP 功能通常用于 与 Spring IoC 容器结合使用。使用普通 bean 配置方面 定义语法(尽管这允许强大的“自动代理”功能)。这是一个 与其他 AOP 实现的关键区别。有些事情你不能做 使用 Spring AOP 轻松或高效地建议非常细粒度的对象(通常, domain 对象)。在这种情况下,AspectJ 是最佳选择。但是,我们的 经验是,Spring AOP 为大多数问题提供了很好的解决方案 适用于 AOP 的企业 Java 应用程序。spring-doc.cadn.net.cn

Spring AOP 从不努力与 AspectJ 竞争提供全面的 AOP 溶液。我们认为,无论是基于代理的框架,如 Spring AOP,还是成熟的 像 AspectJ 这样的框架很有价值,它们是互补的,而不是在 竞争。Spring 将 Spring AOP 和 IoC 与 AspectJ 无缝集成,以启用 在一致的基于 Spring 的应用程序中 AOP 的所有用途 架构。此集成不会影响 Spring AOP API 或 AOP 联盟 应用程序接口。Spring AOP 保持向后兼容。有关 Spring AOP API 的讨论,请参阅下一章spring-doc.cadn.net.cn

Spring Framework 的核心原则之一是非侵入性。这 是你不应该被迫引入特定于框架的类的想法,并且 与您的业务或域模型接口。但是,在某些地方,Spring 框架 确实为您提供了将特定于 Spring Framework 的依赖项引入 代码库。为您提供此类选项的基本原理是,在某些情况下,它 可能更容易阅读或编码某些特定的功能 一种方式。但是,Spring Framework(几乎)总是为您提供选择:您拥有 自由地做出明智的决定,选择最适合您的特定用途 案例或场景。spring-doc.cadn.net.cn

与本章相关的一个选择是 AOP 框架(和 选择哪个 AOP 样式)。您可以选择 AspectJ、Spring AOP 或两者兼而有之。你 还可以选择 @AspectJ 注释样式方法或 Spring XML 配置样式的方法。本章选择引入 首先@AspectJ式的方法不应被视为春季队的标志 更倾向于@AspectJ注释样式的方法,而不是 Spring XML 配置样式。spring-doc.cadn.net.cn

有关更多信息,请参阅选择要使用的 AOP 声明样式 完整讨论每种风格的优缺点。spring-doc.cadn.net.cn