spring使用基于注解的AOP事务管理.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
spring使用基于注解的AOP事务管理

spring使用基于注解的AOP事务管理 16.6 AOP事务管理 AOP事务管理利用了Spring AOP的基础设施,在大多数情况下,Spring AOP会创建一个JDK代理以拦截方法调用。你可以使用装载时编织以在装载期编织切面,这样就不需要代理了(如果你记不清什么是装载时编织,请参看第6章)。你有两种方式来配置Spring AOP事务管理,基于注解的配置以及XML配置。 16.6.1 使用基于注解的AOP事务管理 你可以借助于AOP的自动代理,通过注解将事务性行为引入到现有的bean中。让我们以代码清单16-21开始吧,它展示了类DeclarativeTxBankService。 代码清单16-21 DeclarativeTxBankService实现 ? 请注意@Transactional属性,为了让Spring的事务管理基础设施可以利用该属性创建恰当的切入点和通知,我们需要使用AOP的自动代理和注解驱动的事务支持。代码清单16-22展示了与该注解相对应的XML配置。 代码清单16-22 基于注解的事务管理的配置文件 ? 该XML配置文件展示了标准的bankService bean声明,紧跟其后的是tx:annotation-driven/和aop:aspectj-autoproxy/标签。tx:annotation-driven/标签使用@Transactional注解创建恰当的事务管理切面。接下来由aop:aspectj-autoproxy/通知匹配的bean。 1.探索tx:annotation-driven标签 tx:annotation-driven/标签是注解驱动的事务管理支持的核心。表16-3列出了tx:annotation- driven/标签的所有属性。 表16-3 tx:annotation-driven/标签的属性 属性 说明 transactionManager 指定到现有的PlatformTransaction Manager bean的引用,通知会使用该引用 mode 指定Spring事务管理框架创建通知bean的方式。 可用的值有proxy和aspectj。前者是默认值, 表示通知对象是个JDK代理;后者表示 Spring AOP会使用AspectJ创建代理 order 指定创建的切面的顺序。只要目标对象有 多个通知就可以使用该属性 proxy-target-class 该属性如果为true就表示你想要代理目标 类而不是bean所实现的所有接口 2.探索@Transactional注解 凭借@Transactional注解我们就可以控制通知将要创建的事务定义的方方面面。就像使用transactionAttributes属性表达式一样,你可以指定传播、隔离级别、超时以及允许和不允许的异常。表16-4列出了@Transactional注解的所有属性。 表16-4 @Transactional注解的属性 属性 类型 说明 propagation org.springframework. annotaion.transaction.Propagation 指定事务定义中 使用的传播 isolation org.springframework. annotation.  transaction.Isolation 设定事务的隔离级别 timeout int 指定事务的超时 (单位为秒) readOnly boolean 如果为true,事务 就被标识为只读 noRollbackFor Class? extends Throwable[] 目标方法可抛出的 异常所构成的数组, 但通知仍会提交事务 rollbackFor Class? extends Throwable[] 异常所构成的数组, 如果目标方法抛出了 这些异常,通知就会回滚事务 3.基于注解的事务管理小结 通过@Transactional注解,我们可以轻松地为一个方法声明事务。其好处在于你可以很直观地看到哪些方法带有事务,因为方法上面有该注解修饰。其缺点是你不得不为每个需要事务的方法都加上@Transactional注解。如果你使用的是默认的事务属性,这就不算什么问题,但当你需要设置其他的事务属性时,这就变得很乏味了,因为你要不停的复制、粘贴。另一种方式就是用@Transactional注解去修饰类。这会将事务应用到该类中的所有方法。这种方式的问题在于所有的方法,包括简单的读取方法和设置方法也都运行在事务中了,尽管根本不需要这么做。XML AOP事务管理能更好地处理这种情况。 说明?虽然说通过使用@Transactional注解会使所有方法运行在事务中,但我还要再多说几句:其实准确的说法应该是如果某个类被

文档评论(0)

aicencen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档