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

Spring AOP 目前仅支持方法执行连接点(建议执行 的 方法 在 春豆 上)。未实现现场拦截,但支持 可以在不破坏核心 Spring AOP API 的情况下添加字段拦截。如果你需要 要建议字段访问和更新连接点,请考虑使用 AspectJ 等语言。

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

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

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

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

与本章相关的一个选择是 AOP 框架(和 哪种 AOP 样式)进行选择。您可以选择 AspectJ 和/或 Spring AOP。你 还可以选择@AspectJ注解样式方法或Spring XML 配置式方法。本章选择介绍 @AspectJ式的方法首先不应该被看作是Spring团队的标志 比起Spring XML配置样式,更倾向于@AspectJ注解样式的方法。

请参阅选择要使用的 AOP 声明样式,以更全面地讨论 每种风格。