转载:http://war-martin.iteye.com/blog/1396335

第一种配置方法:基于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》

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

  1. spring3.0事务的配置

    第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpd ...

  2. 事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...

  3. Spring事务管理配置以及异常处理

    Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  4. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  5. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用[转]   spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...

  6. Spring3数据库事务管理机制

    Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnianshilongnian.iteye.com/blog/1496953 Spring提供 ...

  7. JTA事务管理--配置剖析(二)

    Spring引用Tomcat的 JTA事务     Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JD ...

  8. JTA事务管理--配置剖析

    概述    [IT168 专稿]Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还认为 ...

  9. Spring事务管理配置示例

    (一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...

随机推荐

  1. noip2013 火柴排序

    涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ,其中 ai 表示第一列火柴中第 i 个火柴的高度,b ...

  2. @proprety数组字典字符串用copy和strong区别(深浅拷贝)

    ////  @proprety数组字典字符串用copy和strong区别(深浅拷贝).h//  IOS笔记//// /* _proprety________copy_strong_________h ...

  3. CSS3 动画基础

    该文为译文转载,原文地址:http://tech.163.com/mobile/10/0106/09/5SB96QSM00112K88.html   译文:你需要知道的CSS3 动画技术 原文:Wha ...

  4. 适配器模式(Adapter Pattern)

    将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 模式中的角色 目标接口(Target):客户所期待的接口.目标可以是具体的或 ...

  5. 论文笔记之:Deep Recurrent Q-Learning for Partially Observable MDPs

    Deep Recurrent Q-Learning for Partially Observable MDPs  摘要:DQN 的两个缺陷,分别是:limited memory 和 rely on b ...

  6. 10、java中的抽象类

    当多个类中出现相同功能,但是功能主体不同,这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特点:1,抽象方法一定在抽象类中.2,抽象方法和抽象类都必须被abst ...

  7. MSSQL 判断一个时间段是否在另一个时间段内!

    MSSQL 判断一个时间段是否在另一个时间段内! 1 CREATE TABLE #B ( MeetingRoom int, BeginTime datetime, EndTime datetime ) ...

  8. C++11:POD数据类型

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 啥是POD类型? POD全称Plain Old Data.通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是 ...

  9. Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptabl

    在使用AFNetworking 2.0  的时候本来一切很顺畅,但是中途遇到几个比较坑的地方 这里分享一下爬坑经历,忘读者不能速爬坑! 在发送请求后,NSURLSessionDataTask一直报错 ...

  10. jquery是如何架构的.

    心里一直有个疑问. jquery是如何做到一个jQuery即可以当方法用比如$();又可以当对象用$.extend(); 现在总结一下吧 function method(){} var m=new m ...