赞
踩
1.开启事务
2.执行dao处理
3.提交或回滚事务
1)@EnableTransactionManagement
2) xml配置开启
<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
org.springframework.transaction.annotation.Transactional包看源码,默认值
Propagation.REQUIRED
Isolation.DEFAULT
aop,代理对象会在执行@Transactional注解的方法前开启事务,根据执行结果,代理对象会在方法后回滚或提交事务。
org.springframework : spring-tx包
Transactional注解在
org.springframework.transaction.annotation.Transactional
注解后置处理,扫描并处理Transactional注解的接口是
org.springframework.transaction.annotation.TransactionAnnotationParser
找到相应的实现类就是注解事务处理
理解就是为了防止出现系统抛异常,事务没有回滚而出错
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
TransactionDefinition.PROPAGATION_SUPPORTS
TransactionDefinition.PROPAGATION_NEVER
rollbackFor=异常类(非继承自 RuntimeException 的异常)(spring默认RuntimeException会使事务回滚)
一般都是注解在控制器直接调用的service层的public方法上
理解:就是Transactional注解的事务是由spring来帮你开启事务的,但是spring是使用aop调用你的方法
method.invoke
如果你的方法内部调用了带有Transactional注解的方法,spring不知道,所有就没有开启事务
src:https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。