欢迎来到天天文库
浏览记录
ID:18890520
大小:94.00 KB
页数:4页
时间:2018-09-26
《spring使用基于注解的aop事务管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、spring使用基于注解的AOP事务管理16.6 AOP事务管理AOP事务管理利用了SpringAOP的基础设施,在大多数情况下,SpringAOP会创建一个JDK代理以拦截方法调用。你可以使用装载时编织以在装载期编织切面,这样就不需要代理了(如果你记不清什么是装载时编织,请参看第6章)。你有两种方式来配置SpringAOP事务管理,基于注解的配置以及XML配置。16.6.1 使用基于注解的AOP事务管理你可以借助于AOP的自动代理,通过注解将事务性行为引入到现有的bean中。让我们以代码清单16-21开始吧,它展示了类DeclarativeTxBankService。代
2、码清单16-21 DeclarativeTxBankService实现 请注意@Transactional属性,为了让Spring的事务管理基础设施可以利用该属性创建恰当的切入点和通知,我们需要使用AOP的自动代理和注解驱动的事务支持。代码清单16-22展示了与该注解相对应的XML配置。代码清单16-22 基于注解的事务管理的配置文件 该XML配置文件展示了标准的bankServicebean声明,紧跟其后的是和标签。标签使用@Tra
3、nsactional注解创建恰当的事务管理切面。接下来由通知匹配的bean。1.探索tx:annotation-driven标签标签是注解驱动的事务管理支持的核心。表16-3列出了标签的所有属性。表16-3 标签的属性属性说明transactionManager指定到现有的PlatformTransactionManagerbean的引用,通知会使用该引用mode指定Spring事务管理框
4、架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示SpringAOP会使用AspectJ创建代理order指定创建的切面的顺序。只要目标对象有多个通知就可以使用该属性proxy-target-class该属性如果为true就表示你想要代理目标类而不是bean所实现的所有接口2.探索@Transactional注解凭借@Transactional注解我们就可以控制通知将要创建的事务定义的方方面面。就像使用transactionAttributes属性表达式一样,你可以指定传播、隔离级别、超时以及允许和不允许的异
5、常。表16-4列出了@Transactional注解的所有属性。表16-4 @Transactional注解的属性属性类型说明propagationorg.springframework.annotaion.transaction.Propagation指定事务定义中使用的传播isolationorg.springframework.annotation. transaction.Isolation设定事务的隔离级别timeoutint指定事务的超时(单位为秒)readOnlyboolean如果为true,事务就被标识为只读noRollbackForClass
6、ndsThrowable>[]目标方法可抛出的异常所构成的数组,但通知仍会提交事务rollbackForClass[]异常所构成的数组,如果目标方法抛出了这些异常,通知就会回滚事务3.基于注解的事务管理小结通过@Transactional注解,我们可以轻松地为一个方法声明事务。其好处在于你可以很直观地看到哪些方法带有事务,因为方法上面有该注解修饰。其缺点是你不得不为每个需要事务的方法都加上@Transactional注解。如果你使用的是默认的事务属性,这就不算什么问题,但当你需要设置其他的事务属性时,这就变得很乏味了,因为你要不停的复
7、制、粘贴。另一种方式就是用@Transactional注解去修饰类。这会将事务应用到该类中的所有方法。这种方式的问题在于所有的方法,包括简单的读取方法和设置方法也都运行在事务中了,尽管根本不需要这么做。XMLAOP事务管理能更好地处理这种情况。说明 虽然说通过使用@Transactional注解会使所有方法运行在事务中,但我还要再多说几句:其实准确的说法应该是如果某个类被@Transactional注解所修饰,那么该类实例化的Springbean的所有方法都是事务性的。
此文档下载收益归作者所有