此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 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 轻松或高效地,例如建议非常细粒度的对象(通常是,域对象)。在这种情况下,AspectJ 是最佳选择。然而,我们的经验是,Spring AOP 为大多数问题提供了出色的解决方案适用于 AOP 的企业 Java 应用程序。spring-doc.cadn.net.cn

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

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

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

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