Infra AOP 的能力与目标

Infra AOP 以纯 Java 实现,无需特殊编译过程。

Infra AOP 目前只支持方法执行连接点(对 Infra bean 上的方法执行进行通知)。 字段拦截尚未实现,不过在不破坏核心 Infra AOP API 的前提下可以添加字段拦截支持。 如果需要对字段访问和更新连接点进行通知,可考虑使用 AspectJ。

Infra AOP 的 AOP 方法与大多数其他 AOP 框架不同。其目标不是提供最完整的 AOP 实现 (尽管 Infra AOP 已相当强大),而是提供 AOP 实现与 Infra IoC 的紧密集成, 以帮助解决企业应用中的常见问题。

因此,例如 TODAY Framework 的 AOP 功能通常与 Infra IoC 容器配合使用。 切面通过常规的 bean 定义语法进行配置(并可借助强大的“自动代理”能力)。 这与其他 AOP 实现有着关键差异。使用 Infra AOP 有些事情并不容易或高效, 比如对非常细粒度的对象(通常是领域对象)进行通知。在这种情况下 AspectJ 是最佳选择。 不过我们的经验是,Infra AOP 对于大多数适合使用 AOP 的企业级 Java 应用问题都能提供出色的解决方案。

Infra AOP 从不试图与 AspectJ 竞争提供全面的 AOP 解决方案。我们认为基于代理的框架 (如 Infra AOP)与完整的框架(如 AspectJ)都是有价值的,并且是互补而非竞争关系。 Infra 将 Infra AOP 与 IoC 无缝集成到 AspectJ 中,使 AOP 的各种用法都能在一致的 Infra 应用架构中实现。这种集成不会影响 Infra AOP API 或 AOP Alliance API。 Infra AOP 保持向后兼容。参见 后续章节 了解 Infra AOP API。

TODAY Framework 的核心原则之一是非侵入性,即不应被迫将框架特定的类和接口引入业务或 领域模型。不过在某些地方,TODAY Framework 提供了引入 TODAY Framework 专用依赖的选项。 给出这些选项的理由是,在某些场景中,以特定方式读取或编写功能可能更为简便。然而, TODAY Framework(几乎)总会给你选择的自由:你可以根据具体用例或场景做出明智决定。

与本章相关的一个选择是:应使用哪种 AOP 框架(以及哪种 AOP 风格)。 你可以选择 AspectJ、Infra AOP 或两者同时使用,也可以选择 @AspectJ 注解风格或 Infra XML 配置风格。本章优先介绍 @AspectJ 风格,并不意味着 Infra 团队偏好它而非 Infra XML 配置风格。

参见 选择使用哪种 AOP 声明风格,了解各风格的优缺点。