此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
Spring AOP 的功能和目标
Spring AOP 是用纯 Java 实现的。无需特殊编译 过程。Spring AOP 不需要控制类加载器层次结构,因此 适合在 Servlet 容器或应用程序服务器中使用。
Spring AOP 目前只支持方法执行连接点(通知执行 of 方法)。字段拦截未实现,尽管支持 可以在不破坏核心 Spring AOP API 的情况下添加字段拦截。如果您需要 要建议字段访问和更新连接点,请考虑使用 AspectJ 等语言。
Spring AOP 的 AOP 方法与大多数其他 AOP 框架不同。目标是 而不是提供最完整的 AOP 实现(尽管 Spring AOP 相当 有能力的)。相反,目标是在 AOP 实现和 Spring IoC,帮助解决企业应用程序中的常见问题。
因此,例如,Spring 框架的 AOP 功能通常用于 与 Spring IoC 容器结合使用。Aspect 是使用普通 bean 配置的 定义语法(尽管这允许强大的 “自动代理” 功能)。这是一个 与其他 AOP 实现的关键区别。你不能做一些事情 轻松或高效地使用 Spring AOP,例如通知非常细粒度的对象(通常为 domain 对象)。在这种情况下,AspectJ 是最好的选择。但是,我们的 经验表明,Spring AOP 为大多数 适合 AOP 的 enterprise Java 应用程序。
Spring AOP 从不努力与 AspectJ 竞争以提供全面的 AOP 溶液。我们相信,基于代理的框架(如 Spring AOP)和成熟的 像 AspectJ 这样的框架很有价值,而且它们是互补的,而不是在 竞争。Spring 将 Spring AOP 和 IoC 与 AspectJ 无缝集成,以实现 AOP 的所有使用都在一个一致的基于 Spring 的应用程序中的应用 架构。此集成不会影响 Spring AOP API 或 AOP 联盟 应用程序接口。Spring AOP 保持向后兼容。有关 Spring AOP API 的讨论,请参见下一章。
Spring Framework 的核心原则之一是非侵入性。这 是不应强制引入特定于框架的类的想法, 接口连接到您的业务或域模型。但是,在某些地方, Spring 框架 确实为您提供了将特定于 Spring Framework 的依赖项引入 代码库。为您提供此类选项的基本原理是因为,在某些情况下,它 可能只是更容易阅读或编写此类 一种方法。但是,Spring Framework(几乎)始终为您提供选择:您有 自由地决定哪种选项最适合您的特定用途 案例或场景。 与本章相关的一个选择是 AOP 框架(以及 which AOP style) 进行选择。您可以选择 AspectJ 和/或 Spring AOP。你 还可以选择 @AspectJ 注解样式方法或 Spring XML configuration-style 方法。本章选择介绍 @AspectJ 风格 First 的方法不应被视为 Spring 团队 更喜欢 @AspectJ Comments 样式的方法,而不是 Spring XML 配置样式。 有关以下方法的优缺点的更完整讨论,请参见选择要使用的 AOP 声明样式 每种样式。 |