5.6。选择要使用的AOP声明风格 【spring 核心技术 翻译】

5.6。选择要使用的AOP声明风格

一旦您确定了一个方面是实现给定需求的最佳方法,那么如何在使用Spring AOP或AspectJ以及在方面语言(代码)风格、@AspectJ注释风格和Spring XML风格之间做出选择呢?这些决定受到许多因素的影响,包括应用程序需求、开发工具和团队对AOP的熟悉程度。

5.6.1。Spring AOP还是Full AspectJ?

使用最简单的方法。Spring AOP比使用完整的AspectJ更简单,因为不需要在开发和构建过程中引入AspectJ编译器/ weaver。如果您只需要通知Spring bean上操作的执行,那么Spring AOP就是正确的选择。如果需要通知不是由Spring容器管理的对象(通常是域对象),则需要使用AspectJ。如果希望通知连接点而不是简单的方法执行(例如,字段get或set连接点等等),还需要使用AspectJ

在使用AspectJ时,可以选择AspectJ语言语法(也称为“代码风格”)或@AspectJ注释风格。显然,如果您不使用Java 5+,那么已经为您做出了选择:使用代码样式。如果方面在您的设计中扮演了很大的角色,并且您能够为Eclipse使用AspectJ开发工具(AJDT)插件,那么AspectJ语言语法是首选选项。它更干净、更简单,因为该语言是专门为编写方面而设计的。如果您不使用Eclipse,或者只有几个方面在您的应用程序中不起主要作用,那么您可能需要考虑使用@AspectJ风格,在IDE中坚持常规的Java编译,并在构建脚本中添加一个方面编织阶段。

5.6.2。@AspectJ还是Spring AOP的XML ?

如果选择使用Spring AOP,则可以选择@AspectJ或XML样式。有各种各样的权衡需要考虑。
现有的Spring用户可能最熟悉XML风格,而且它由真正的pojo支持。当使用AOP作为配置企业服务的工具时,XML可能是一个不错的选择(一个好的测试是,是否将切入点表达式视为您可能想要单独更改的配置的一部分)。使用XML样式,可以从配置中更清楚地看出系统中存在哪些方面。
XML样式有两个缺点。首先,它没有将它所处理的需求的实现完全封装在一个地方。DRY原则认为系统内的任何知识都应该有一个单一的、明确的、权威的表示。当使用XML样式时,需求如何实现的知识在支持bean类的声明和配置文件中的XML中被分割开来。当您使用@AspectJ样式时,该信息被封装在单个模块中:方面。其次,XML风格在表达内容上比@AspectJ风格略微受限:只支持“单例”方面实例化模型,而且不可能组合XML中声明的命名切入点。例如,在@AspectJ样式中,您可以编写如下内容:

@Pointcut("execution(* get*())")
public void propertyAccess() {}

@Pointcut("execution(org.xyz.Account+ *(..))")
public void operationReturningAnAccount() {}

@Pointcut("propertyAccess() && operationReturningAnAccount()")
public void accountPropertyAccess() {}

在XML样式中,可以声明前两个切入点:

<aop:pointcut id="propertyAccess"
        expression="execution(* get*())"/>

<aop:pointcut id="operationReturningAnAccount"
        expression="execution(org.xyz.Account+ *(..))"/>

XML方法的缺点是不能通过组合这些定义来定义accountPropertyAccess切入点。

@AspectJ样式支持额外的实例化模型和更丰富的切入点组合。它的优点是将方面保持为模块化单元。它还有一个优势,即@AspectJ方面可以被Spring AOP和AspectJ理解(并因此消费)。因此,如果以后决定需要AspectJ的功能来实现其他需求,可以轻松迁移到经典的AspectJ设置。总的来说,除了企业服务的简单配置之外,Spring团队更喜欢使用@AspectJ风格来定制方面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值