transactionManager : 编程式事务.建立在AOP之上的。其本质是对方法前后进行拦截 .不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
transactionTemplate : 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
优缺点:
1.声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式 . 只要加上注解就可以获得完全的事务支持。
2. 编程式事务那样可以作用到代码块级别,而且声明式事务管理最细粒度只能作用到方法级别.二者的作用级别和颗粒度有一定的的差别。
一. 声明式事务
1.配置方式
<-- 开启事务控制的注解支持 -->
<tx:annotation-driven transaction-manager=“transactionManager”/>
<-- applicationContext.xml : 中进行配置 -->
< bean id=“transactionManager” class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>
< property name=“dataSource” ref=“dataSource” />
</ bean>
2. 使用@Transactional注解
@Transactional 注解应该只被应用到 public 方法上 , @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效,一般应用在方法上,如果某些方法被protected、private 或者默认可见性的修饰后,将会自动进行忽略,即使出现异常,也不会进行报错.
应用:(下列注解贴于方法或者类上,就可以对整个方法或者类进行事务管理)
@Transactional
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Transactional(“transactionManager”)
二. 编程式事务
1.配置方式
<-- 开启事务控制的注解支持 -->
<tx:annotation-driven transaction-manager=“transactionManager”/>
<-- 使用spring jdbc管理事务 -->
< bean id=“transactionManager” class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>
< property name=“dataSource” ref=“dataSource”/>
< /bean>
<-- applicationContext.xml : 中进行配置 -->
< bean id=“transactionTemplate” class=“org.springframework.transaction.support.TransactionTemplate”>
< property name=“transactionManager” ref=“transactionManager”/>
</ bean >
2. 使用@Transactional注解
注入依赖方式:
@Autowired
private TransactionTemplate transactionTemplate;
注解方式
@Transactional(“transactionTemplate”)
使用 transactionManager和transactionTemplate管理事务
最新推荐文章于 2024-08-04 18:16:12 发布