1
虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
<tx:annotation-driven> 默认值
首先,<tx:annotation-driven/> 会有一个属性来指定使用哪个事务管理器,如:<tx:annotation-driven transaction-manager="transactionManager" />
22222222222222222222
编程式和声明式事务管理的总结
Spring将事物管理分成了两类:
【1】编程式事务管理:手动编写代码进行事物管理(很少使用)
【2】声明式事务管理:
基于TransactionProxyFactoryBean的方式(很少使用)
——需要为每个进行事务管理的类,配置一个代理类,后期维护和管理不方便。
基于AspectJ的XML方式(经常使用)
——可以清晰的在XML配置文件中,查看到哪些类哪些方法应用事物管理,业务层上不需要添加任何东西。
基于注解方式(经常使用)
——使用简单,需要为每一个需要事务管理的业务层上添加注解@Transactional。
spring事务管理总结
事务管理总结
课程的总结
Spring事务管理的总结
spring的事务总结
spring事务总结
AspectJ的XML方式
基于注解方式
spring事务管理方式
课程总结:介绍了四种Spring做事务控制的方法
手动编写代码做事务管理(很少使用)
为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强(很少使用)
基于AspectJ的XML方式(经常使用), 一旦配置好之后,类上不需要添加任何东西
12345678910111213141516171819202122232425262728 | <!-- 配置事务管理器 --> < bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > < property name = "dataSource" ref = "dataSource" ></ property > </ bean > <!-- 配置事务的通知(事务的增强) --> < tx:advice id = "txAdvice" transaction-manager = "transactionManager" > < tx:attributes > <!-- propagation 事务传播行为 isolation : 事务的隔离级别 read-only 只读 rollback-for 发生哪些异常回滚 no-rollback-for 发生哪些异常不回滚 timeout 过期信息 --> < tx:method name = "transfer" propagation = "REQUIRED" isolation = "DEFAULT" read-only = "false" rollback-for = "" timeout = "" no-rollback-for = "" /> </ tx:attributes > </ tx:advice > <!-- 配置切面 --> < aop:config > <!-- 配置切入点 --> < aop:pointcut expression = "execution(* cn.muke.spring.demo3.AccountService+.*(..))" id = "pointcut1" /> <!-- 配置切面 --> < aop:advisor advice-ref = "txAdvice" pointcut-ref = "pointcut1" /> </ aop:config > |
4. 基于注解的方式(经常使用)
配置文件中开启注解驱动
1234567 | <!-- 配置事务管理器 --> < bean id = "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > < property name = "dataSource" ref = "dataSource" ></ property > </ bean > <!-- 开启注解事务 --> < tx:annotation-driven transaction-manager = "transactionManager" /> |
代码中直接使用@Transactional注解
12345678910 | /** * @Transactional 注解中的属性 * propagation 事务的传播行为 * isolation 事务的隔离级别 * */ @Transactional (propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly= false ) public class AccountServiceImpl implements AccountService{ //其他省略 } |
Spring事务管理总结
课程总结 几种spring实现事务控制的区别和使用场景,开发中最常用的是最后两种申明式事务。
1.基于aspect的切面式xml配置事务,配置稍复杂,但清晰可见事务使用范围,无需修改代码.
2.基于注解的事务 配置简单,但需要修改代码,总的来说也简单。
课程总结:介绍了四种Spring做事务控制的方法
手动编写代码做事务管理(很少使用)
为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强(很少使用)
基于AspectJ的XML方式(经常使用), 一旦配置好之后,类上不需要添加任何东西
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务的通知(事务的增强) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- propagation 事务传播行为 isolation : 事务的隔离级别 read-only 只读 rollback-for 发生哪些异常回滚 no-rollback-for 发生哪些异常不回滚 timeout 过期信息 --> <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" read-only="false" rollback-for="" timeout="" no-rollback-for=""/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <!-- 配置切入点 --> <aop:pointcut expression="execution(* cn.muke.spring.demo3.AccountService+.*(..))" id="pointcut1"/> <!-- 配置切面 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>
4. 基于注解的方式(经常使用)
配置文件中开启注解驱动
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager="transactionManager"/>
代码中直接使用@Transactional注解
/** * @Transactional 注解中的属性 * propagation 事务的传播行为 * isolation 事务的隔离级别 * */ @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false) public class AccountServiceImpl implements AccountService{ //其他省略 }