[spring]spring三种事物处理方式
来源:互联网 发布:中国照相馆 知乎 编辑:程序博客网 时间:2024/05/21 09:52
1、用原始的transactionfactorybean的,代理dao事务处理
2、用aop:config声明要进行事务增强的切面,用tx:advice声明具体方法的事务属性,及应用到的事务管理器
3、使用@transactional注解配置声明事务(最简单实用的方法)
如有一代表用户的域对象user:
package com.domain;import Java.io.serializable;public class user implements serializable{private int user_id;private string user_name;private string user_password;private string user_desc;....//省略set、get方法}
user的数据库操作接口:
package com.dao;import com.domain.user;public interface userdao {public void adduser(user user);}
有一继承spring jdbc支持类的userdao接口实现类,实现添加一个user的方法。它需要注入一个spring jdbc模板类jdbctemplate:
package com.dao.jdbc;import com.domain.user;import com.dao.userdao;import org.springframework.jdbc.core.support.jdbcdaosupport;public class userjdbcdao extends jdbcdaosupport implements userdao{public void adduser(user user){string sql ="insert into user(user_name,user_password,user_desc) values(?,?,?)";object[] params = new object[]{user.getuser_name(),user.getuser_password(),user.getuser_desc()} ;this.getjdbctemplate().update(sql, params);}}
以上dao层的类对应的bean的基本配置文件app_dao.xml如下(数据源的属性放入了外部的资源文件”prop.properties”):
<bean class="org.springframework.beans.factory.config.propertyplaceholderconfigurer"><property name="location" value="classpath:prop.properties"/></bean><!--数据源--><bean id="datasource" class="org.apache.commons.dbcp.basicdatasource"destroy-method="close"><property name="driverclassname" value="${jdbc.driverclassname}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--spring jdbc模板bean,它注入了上面的数据源--><bean id="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"><property name="datasource" ref="datasource"/></bean><!--user数据操作的bean声明,它注入了上面的spring jdbc模板bean:jdbctemplate--><bean id="userjdbcdao"class="com.dao.jdbc.userjdbcdao"><property name="jdbctemplate" ref="jdbctemplate"/></bean></beans>
这里我简单地模拟业务类(业务接口userservice省略):
package com.service.impl;import com.dao.userdao;import com.domain.user;import com.service.userservice;public class userserviceimpl implements userservice {private userdao userdao;public void setuserdao(userdao userdao){this.userdao = userdao;}public void adduser(user user){this.userdao.adduser(user);}}
为了在业务类中使用事务管理功能,有如下几个方法:
1、用原始的transactionfactorybean的app.xml基本配置:
<import resource="classpath:app_dao.xml"/><!--导入dao层的配置--><!--spring jdbc的事务管理bean,引入了dbcp数据源--><bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"><property name="datasource" ref="datasource"/></bean><!--业务类bean--><bean id="userserviceimpltarget" class="com.service.impl.userserviceimpl"><property name="userdao" ref="userjdbcdao"/></bean><!--应用原始的transactionfactorybean进行事务管理bean的声明--><bean id="userserviceimpl"class="org.springframework.transaction.interceptor.transactionproxyfactorybean"><property name="transactionmanager" ref="txmanager"/><!--指定事务管理bean--><property name="target" ref="userserviceimpltarget"/><!--指定业务bean--><property name="transactionattributes"><!--事务的属性设置列表--><props><prop key="add*">propagation_required,isolation_serializable</prop><!--设置事务为只读时,添加数据将会产生异常--><!--<prop key="add*">propagation_required,isolation_serializable,readonly</prop>--></props></property></bean>
测试:
……
userserviceimpl usi = (userserviceimpl)ctx.getbean(“userserviceimpl”);
……
2、用tx/aop命名空间配置:
<?xml version="1.0" encoding="utf-8"?><beans .....xmlns:tx="http://www.springframework.org/schema/tx"xsp:schemalocation="http://www.springframework.org/schema/beans...........http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd"><import resource="classpath:app_dao.xml"/><bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"><property name="datasource" ref="datasource"/></bean><bean id="userserviceimpltarget" class="com.service.impl.userserviceimpl"><property name="userdao" ref="userjdbcdao"/></bean><!--应用tx/aop命名空间进行事务声明--><!--用tx:advice声明具体方法的事务属性,及应用到的事务管理器--><tx:advice id="txadvice" transaction-manager="txmanager"><tx:attributes><tx:method name="add*" read-only="true"/></tx:attributes></tx:advice><!--用aop:config声明要进行事务增强的切面--><aop:config><aop:pointcut id="servicemethod"expression="execution(* com.service..add*(..))"/><aop:advisor pointcut-ref="servicemethod" advice-ref="txadvice"/></aop:config></beans>
测试:
…….
userservice usi = (userservice)ctx.getbean(“userserviceimpltarget”);
……….
3、使用@transactional注解配置声明事务(最简单实用的方法):
在需要事务管理增强的业务类加入@transactional注解标记,如:
……
import org.springframework.transaction.annotation.transactional; //注解式事务
@transactional(readonly=false) //对业务类进行事务增强的标注
public class userserviceimpl implements userservice {
………..
}
再在配置文件中用<tx:annotation-driven>
驱动自动为标记@transactional注解的类织入事务管理增强:
<import resource="classpath:app_dao.xml"/><bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"><property name="datasource" ref="datasource"/></bean><!--注解式事务配置驱动--><tx:annotation-driven transaction-manager="txmanager" proxy-target-class="true"/><!--业务类bean的实现类标注了@transactional注解,所以会被tx:annotation-driven注解驱动自动织入事务增强--><bean id="userservice" class="com.service.impl.userserviceimpl"><property name="userdao" ref="userjdbcdao"/></bean>
测试:
………
userserviceimpl usi = (userserviceimpl)ctx.getbean(“userservice”);
………
- [spring]spring三种事物处理方式
- spring三种事物处理方式
- spring三种事物处理方式
- Spring-事物的处理方式。。。
- Spring-事物的处理方式。。。
- Spring 事物处理2
- spring事物处理
- spring事物处理
- Spring 事物处理
- Spring事物处理
- spring 事物处理机制
- Spring 事物处理
- spring事物处理异常
- spring线程处理事物
- spring事物处理2
- Spring事物配置的几种方式
- spring事物配置的几种方式
- spring事物配置的五种方式
- ARM Linux启动流程-汇编第一阶段
- phpExcel导出表格
- BFS
- Windows 远程登陆 Ubuntu【VNC Viewer】
- linux最小化安装
- [spring]spring三种事物处理方式
- JS的checkbox实现全选
- JAVA线程对象管理
- web前端之dojo(用javascript语言实现的开源DHTML工具包)
- NEFU 19 采药
- 一般前端UI框架的DataGrid如何处理
- jdbc批量插入
- 精通JavaScript攻击框架:AttackAPI(上)
- ContentType 内容类型