此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
选择要使用的 AOP 声明样式
一旦您确定某个方面是实现给定的最佳方法 要求,您如何决定在使用 Spring AOP 或 AspectJ 之间以及在 方面语言(代码)样式、@AspectJ 注释样式还是 Spring XML 样式?这些 决策受多种因素影响,包括应用要求、 开发工具,以及团队对 AOP 的熟悉程度。
Spring AOP 还是 Full AspectJ?
使用最简单的东西。Spring AOP 比使用完整的 AspectJ 更简单,因为 无需将 AspectJ 编译器/编织器引入您的开发中 并构建流程。如果您只需要建议在 Spring 上执行作 beans,Spring AOP 是正确的选择。如果需要建议不受 Spring 容器(例如域对象,通常),您需要使用 方面J.如果您想建议加入点以外的连接点,您还需要使用 AspectJ 简单的方法执行(例如,字段获取或设置连接点等)。
当您使用 AspectJ 时,您可以选择 AspectJ 语言语法(也称为 “代码样式”)或@AspectJ注释样式。如果方面发挥大作用 角色,并且您可以使用 AspectJ 开发工具(AJDT)插件,AspectJ 语言语法是 首选选项。它更干净、更简单,因为语言是有目的的 专为写作方面而设计。如果您不使用 Eclipse 或只有几个方面 在您的应用程序中不起主要作用,您可能需要考虑使用 @AspectJ样式,在 IDE 中坚持常规 Java 编译,并添加 构建脚本的方面编织阶段。
Spring AOP 的 @AspectJ 还是 XML?
如果您选择使用 Spring AOP,则可以选择 @AspectJ 或 XML 样式。 需要考虑各种权衡。
XML 样式可能是现有 Spring 用户最熟悉的,并且有正版 POJOs。当使用 AOP 作为配置企业服务的工具时,XML 可以是一个很好的 选择(一个好的测试是您是否认为切入点表达式是 配置)。对于 XML 样式,它是 可以说,从您的配置中可以更清楚地了解系统中存在哪些方面。
XML 样式有两个缺点。首先,它没有完全封装 在一个地方实现它所解决的要求。DRY 原理说 任何部分都应该有一个单一的、明确的、权威的表示 系统内的知识。使用 XML 样式时,了解需求如何 在后备 Bean 类的声明和 XML 中拆分 配置文件。使用@AspectJ样式时,将封装此信息 在单个模块中:方面。其次,XML 样式在 它可以表达比@AspectJ风格:只有“单例”方面实例化模型 ,并且无法组合在 XML 中声明的命名切入点。 例如,在@AspectJ样式中,您可以编写如下内容:
-
Java
-
Kotlin
@Pointcut("execution(* get*())")
public void propertyAccess() {}
@Pointcut("execution(com.xyz.Account+ *(..))")
public void operationReturningAnAccount() {}
@Pointcut("propertyAccess() && operationReturningAnAccount()")
public void accountPropertyAccess() {}
@Pointcut("execution(* get*())")
fun propertyAccess() {}
@Pointcut("execution(com.xyz.Account+ *(..))")
fun operationReturningAnAccount() {}
@Pointcut("propertyAccess() && operationReturningAnAccount()")
fun accountPropertyAccess() {}
在 XML 样式中,您可以声明前两个切入点:
<aop:pointcut id="propertyAccess"
expression="execution(* get*())"/>
<aop:pointcut id="operationReturningAnAccount"
expression="execution(com.xyz.Account+ *(..))"/>
XML 方法的缺点是无法定义accountPropertyAccess
通过结合这些定义来切入点。
@AspectJ样式支持额外的实例化模型和更丰富的切入点 组成。它的优点是将方面保持为模块化单元。它还具有 @AspectJ方面可以通过以下方式理解(并因此被消费)的优势 Spring AOP 和 AspectJ。因此,如果您以后决定需要 AspectJ 的功能 要实现其他要求,您可以轻松迁移到经典的 AspectJ 设置。 一般来说,Spring 团队更喜欢@AspectJ样式来处理自定义方面,而不是简单的 企业服务的配置。