Spring—事务管理
2015-09-23 10:42
573 查看
Spring事务管理分成了两类:编程式事务管理和声明式事务管理
一、编程式的事务管理
手动编写代码进行事务管理 (很少使用)配置: <!-- 配置业务类 --> <bean id="xxxService" class="com.genius.service.impl.xxxService"> <property name="xxxDao" ref="xxxDao"></property> <!-- 注入事务管理模板 --> <property name="transactionTemplate" ref="transactionTemplate"></property> </bean> <!-- 配置事务管理模版:spring简化事务管理代码提供的类 --> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>
调用: public class XxxService { private XxxDao xxxDao; private TransactionTemplate transactionTemplate; public void transfer(){ transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { // TODO 事务业务处理操作 } }) } }
二、声明式的事务管理
基于TransactionProxyFactoryBean的方式(很少使用)注:需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强
配置: <bean id="xxxService" class="com.genius.service.impl.xxxService"> <property name="xxxDao" ref="xxxDao"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置业务层的代理 --> <bean id="xxxServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 注入事务管理器 --> <property name="transactionManager" ref="transactionManager"></property> <!-- 配置目标Service --> <property name="target" ref="xxxService"></property> <!-- 注入事务属性 --> <property name="transactionAttributes"> <props> <!-- prop的格式: * PROPAGATION :事务的传播行为 * ISOLATION :事务的隔离级别 * readOnly :只读(不可以进行修改,插入,删除) * -Exception :发生哪些异常回滚事务 * +Exception :发生哪些异常不回滚事务 --> <prop key="insert*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
调用: 要注入代理类xxxServiceProxy而不能注入原有的类xxxService,否则事务不起作用
基于AspectJ的XML方式(经常使用)
注:一旦配置好之后,类上不需要添加任何东西(非常清楚的可以看出哪些类使用了事务)
配置: <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置事务的通知(事务增强) --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <!-- AOP 配置 --> <aop:config> <!-- 配置切入点 --> <aop:pointcut id="transactionPointcut" expression="execution(* com.sinosoft.rpf.service..*Impl.*(..))" /> <!-- 配置切面 --> <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /> </aop:config>
调用:直接写业务类,不需要任何其它操作
基于注解的方式(经常使用)
注:配置很简单,使用方便,只需在业务层类上添加一个@Transaction的注解
配置: <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 开启注解事务,如果不指定transaction-manager默认会查找名为transactionManager的bean --> <tx:annotation-driven transaction-manager="transactionManager" />
调用: 业务类上添加@Transaction的注解即可完成事务管理
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- asp内置对象 ObjectContext 事务管理 详解
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- java实现简单美女拼图游戏
- java基本教程之线程休眠 java多线程教程
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录
- 基于Spring框架的Shiro配置方法
- Spring MVC中上传文件实例
- spring aop两种配置方式
- 实例讲解Java的Spring框架中的AOP实现
- 解析Java中如何获取Spring中配置的bean
- Spring的注解配置与XML配置之间的比较
- java Spring整合Freemarker的详细步骤
- Java 二维码,QR码,J4L-QRCode 的资料整理