第一种配置方法:基于XML的事务管理

这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpdate等等。详细配置如下:

  1. <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
  2. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
  3. -->
  4. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  5. <property name="dataSource" ref="dataSource"></property>
  6. </bean>
  7. <!-- 定义事务通知 -->
  8. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  9. <!-- 定义方法的过滤规则 -->
  10. <tx:attributes>
  11. <!-- 所有方法都使用事务 -->
  12. <tx:method name="*" propagation="REQUIRED"/>
  13. <!-- 定义所有get开头的方法都是只读的 -->
  14. <tx:method name="get*" read-only="true"/>
  15. </tx:attributes>
  16. </tx:advice>
  17. <!-- 定义AOP配置 -->
  18. <aop:config>
  19. <!-- 定义一个切入点 -->
  20. <aop:pointcut expression="execution (* com.iflysse.school.services.impl.*.*(..))" id="services"/>
  21. <!-- 对切入点和事务的通知,进行适配 -->
  22. <aop:advisor advice-ref="txAdvice" pointcut-ref="services"/>
  23. </aop:config>

第二中配置方法:基于@Transactional的事务管理

这种方法,只需要在Spring配置文件中定义一个事务管理对象(如DataSourceTransactionManager),然后加入<tx:annotation-driven/>节点,引用该事务管理对象,然后即可在需要进行事务处理的方法使用@Transactional进行标注。示例如下:

Spring配置XML文件

  1. <!-- 定义事务处理类,不同的数据访问方式,事务处理类不同
  2. 比如:Hibernate操作的HibernateTransactionManager,JDBC操作的使用DataSourceTransactionManager
  3. -->
  4. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  5. <property name="dataSource" ref="dataSource"></property>
  6. </bean>
  7. <!-- 声明使用注解式事务 -->
  8. <tx:annotation-driven transaction-manager="transactionManager"/>

Java代码中@Transactional示例

  1. /**
  2. * @author ZYWANG 2011-3-24
  3. */
  4. @Service
  5. @Transactional(propagation = Propagation.REQUIRED)
  6. public class TeacherServicesImpl implements TeacherServices {
  7. @Autowired
  8. TeacherDao dao = null;
  9. public TeacherDao getDao() {
  10. return dao;
  11. }
  12. public void setDao(TeacherDao dao) {
  13. this.dao = dao;
  14. }
  15. @Override
  16. @Transactional(readOnly=true,propagation=Propagation.NEVER)
  17. public List<Teacher> getAllTeachers() {
  18. return getDao().getAllTeachers();
  19. }
  20. @Override
  21. public void addTeacher(Teacher teacher) {
  22. if(teacher.getId() > 0){
  23. getDao().updateTeacher(teacher);
  24. }else{
  25. getDao().addTeacher(teacher);
  26. }
  27. }
  28. }

 个人认为第一中方式的配置的侵入性低多了,写程序时只需要关注业务和命名规范,不需要考虑事务处理;第二种方式的配置可以更加灵活的使用事务,个性化定制。

以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》

原文链接:http://war-martin.iteye.com/blog/1396335

spring3.0事务的配置的更多相关文章

  1. spring3.0事务管理配置

    转载:http://war-martin.iteye.com/blog/1396335 第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的 ...

  2. spring3.0注解定时任务配置及说明

    spring注解方式的定时任务配置: 第一步:spring配置文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  3. spring3.0+Atomikos 构建jta的分布式事务 -- NO

    摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...

  4. spring3.0+Atomikos 构建jta的分布式事务

    摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...

  5. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

  6. spring3.0使用annotation完全代替XML(三)

    很久之前写过两篇博客: spring3.0使用annotation完全代替XML spring3.0使用annotation完全代替XML(续) 用java config来代替XML,当时还遗留下一些 ...

  7. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  8. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

  9. 《Spring3.0就这么简单》

    第一章 认识Spring 1.Spring提供的IOC容器,是Spring大杀器之一.容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创 ...

随机推荐

  1. MySQL流程控制函数

    官方文档:Control Flow Functions Name Description CASE Case operator IF() If/else construct IFNULL() Null ...

  2. Java宝典(三)

    --说说ArrayList,Vector,LinkedList的存储性能和特性. --ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,他们都 ...

  3. UVa133.The Dole Queue

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. SharePoint excel service web part 连接到 filter web part

    本文讲述SharePoint excel service web part 连接到 filter web part的一个简单应用场景. SharePoint excel service web par ...

  5. RAID,mdadm(笔记)

    RAID: 级别:仅代表磁盘组织方式不同,没有上下之分:0: 条带    性能提升: 读,写    冗余能力(容错能力): 无    空间利用率:nS    至少2块盘1: 镜像    性能表现:写性 ...

  6. ECMAScript 6新特性介绍

    箭头函数 箭头函数使用=>语法来简化函数.在语句结构上和C#.Java 8 和 CoffeeScript相似,支持表达式和函数体. . =>`操作符左边为输入的參数.而右边则是进行的操作以 ...

  7. EEPlat vs saleforce 配置 Knowledge Article 演示样例

    ==================================================================================================== ...

  8. JS回调函数的使用和作用

    <html> <head> <title>回调函数(callback)</title> <script language="javasc ...

  9. 【转载】ADO.NET与ORM的比较(4):EntityFramework实现CRUD

    [转载]ADO.NET与ORM的比较(4):EntityFramework实现CRUD 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hiber ...

  10. QQ中未读气泡拖拽消失的实现(参照一位年轻牛B的博主的思路自己实现了一下)

    原文链接:http://kittenyang.com/drawablebubble/,博主年轻却很有思想.相仿的年纪,很佩服他! 首先分析拖拽时的图,大圆.不规则的图(实际上时有规律的不然也画不出来, ...