事务配置其实把思路理清,还是很容易的。

spring的配置文件中关于事务配置总是由三个部分组成:分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问 时,DataSource实际为SessionFactory,TransactionManager的实现为 HibernateTransactionManager。

具体如下图:


 根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

    第一种方式:每个Bean都有一个代理

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  11. <bean id="sessionFactory"
  12. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  13. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  14. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  15. </bean>
  16. <!-- 定义事务管理器(声明式的事务) -->
  17. <bean id="transactionManager"
  18. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  19. <property name="sessionFactory" ref="sessionFactory" />
  20. </bean>
  21. <!-- 配置DAO -->
  22. <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
  23. <property name="sessionFactory" ref="sessionFactory" />
  24. </bean>
  25. <bean id="userDao"
  26. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  27. <!-- 配置事务管理器 -->
  28. <property name="transactionManager" ref="transactionManager" />
  29. <property name="target" ref="userDaoTarget" />
  30. <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
  31. <!-- 配置事务属性 -->
  32. <property name="transactionAttributes">
  33. <props>
  34. <prop key="*">PROPAGATION_REQUIRED</prop>
  35. </props>
  36. </property>
  37. </bean>
  38. </beans>

 第二种方式:所有Bean共享一个代理基类

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  11. <bean id="sessionFactory"
  12. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  13. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  14. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  15. </bean>
  16. <!-- 定义事务管理器(声明式的事务) -->
  17. <bean id="transactionManager"
  18. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  19. <property name="sessionFactory" ref="sessionFactory" />
  20. </bean>
  21. <bean id="transactionBase"
  22. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  23. lazy-init="true" abstract="true">
  24. <!-- 配置事务管理器 -->
  25. <property name="transactionManager" ref="transactionManager" />
  26. <!-- 配置事务属性 -->
  27. <property name="transactionAttributes">
  28. <props>
  29. <prop key="*">PROPAGATION_REQUIRED</prop>
  30. </props>
  31. </property>
  32. </bean>
  33. <!-- 配置DAO -->
  34. <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
  35. <property name="sessionFactory" ref="sessionFactory" />
  36. </bean>
  37. <bean id="userDao" parent="transactionBase" >
  38. <property name="target" ref="userDaoTarget" />
  39. </bean>
  40. </beans>

 第三种方式:使用拦截器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  11. <bean id="sessionFactory"
  12. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  13. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  14. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  15. </bean>
  16. <!-- 定义事务管理器(声明式的事务) -->
  17. <bean id="transactionManager"
  18. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  19. <property name="sessionFactory" ref="sessionFactory" />
  20. </bean>
  21. <bean id="transactionInterceptor"
  22. class="org.springframework.transaction.interceptor.TransactionInterceptor">
  23. <property name="transactionManager" ref="transactionManager" />
  24. <!-- 配置事务属性 -->
  25. <property name="transactionAttributes">
  26. <props>
  27. <prop key="*">PROPAGATION_REQUIRED</prop>
  28. </props>
  29. </property>
  30. </bean>
  31. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  32. <property name="beanNames">
  33. <list>
  34. <value>*Dao</value>
  35. </list>
  36. </property>
  37. <property name="interceptorNames">
  38. <list>
  39. <value>transactionInterceptor</value>
  40. </list>
  41. </property>
  42. </bean>
  43. <!-- 配置DAO -->
  44. <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
  45. <property name="sessionFactory" ref="sessionFactory" />
  46. </bean>
  47. </beans>

 第四种方式:使用tx标签配置的拦截器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  12. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  13. <context:annotation-config />
  14. <context:component-scan base-package="com.bluesky" />
  15. <bean id="sessionFactory"
  16. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  17. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  18. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  19. </bean>
  20. <!-- 定义事务管理器(声明式的事务) -->
  21. <bean id="transactionManager"
  22. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  23. <property name="sessionFactory" ref="sessionFactory" />
  24. </bean>
  25. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  26. <tx:attributes>
  27. <tx:method name="*" propagation="REQUIRED" />
  28. </tx:attributes>
  29. </tx:advice>
  30. <aop:config>
  31. <aop:pointcut id="interceptorPointCuts"
  32. expression="execution(* com.bluesky.spring.dao.*.*(..))" />
  33. <aop:advisor advice-ref="txAdvice"
  34. pointcut-ref="interceptorPointCuts" />
  35. </aop:config>
  36. </beans>

 第五种方式:全注解

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  12. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  13. <context:annotation-config />
  14. <context:component-scan base-package="com.bluesky" />
  15. <tx:annotation-driven transaction-manager="transactionManager"/>
  16. <bean id="sessionFactory"
  17. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  18. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  19. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  20. </bean>
  21. <!-- 定义事务管理器(声明式的事务) -->
  22. <bean id="transactionManager"
  23. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  24. <property name="sessionFactory" ref="sessionFactory" />
  25. </bean>
  26. </beans>

此时在DAO上需加上@Transactional注解,如下:

    1. @Transactional
    2. @Component("userDao")
    3. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    4. public List<User> listUsers() {
    5. return this.getSession().createQuery("from User").list();
    6. }
    7. }

spring事务配置的5种方式的更多相关文章

  1. Spring事务配置的五种方式(转发)

    Spring事务配置的五种方式(原博客地址是http://www.blogjava.net/robbie/archive/2009/04/05/264003.html)挺好的,收藏转发 前段时间对Sp ...

  2. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  3. Spring事务配置的五种方式(转载)

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  4. Spring事务配置的五种方式

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  5. 【荐】Spring事务配置的五种方式

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  6. Spring事务配置的五种方式 -- 越往后需要Spring版本越高

    第五种 基本零配置  个人感觉第四种也可以 Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式, ...

  7. Spring 事务配置的几种方式

    参考:http://www.blogjava.net/robbie/archive/2009/04/05/264003.html http://www.cnblogs.com/appleat/arch ...

  8. Spring事务配置的五种方式(转)

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  9. Spring事务配置的五种方式 巨全!不看后悔,一看必懂!

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  10. (转)Spring事务配置的五种方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

随机推荐

  1. 2024/9/16 CSP-S模拟赛试题

    A 这题是很有意思的一个题,思路就是你考虑kt的位置只可能在四个角,因为这种情况下,他的距离才会最远对吧,所以你就暴力找另一个人fengwu的点的位置,然后计算他们之间的距离然后你求一个\(\max\ ...

  2. delphi 图形图像处理 Image32

    delpher 越来越少了,但不能掩盖它的优秀,很外前看到了 Image32,但发现用它的人很少,这段时间整理了它的资料,重新组合了一个DEMO,也可以说是个小工具,分享出来. Image32 关于I ...

  3. highcharts中的环形图

    环形图如下效果: 代码: that.options = { chart: { type: 'pie', backgroundColor: 'transparent', color: '#fff', / ...

  4. mysql5.7之密码重置

    一.windows下更改mysql数据库密码在windows下找到my.ini文件,例如:C:\ProgramData\MySQL\MySQL Server 5.7,打开该文件夹下的my.ini文件, ...

  5. 2023-05 多校联合训练 ZJNU站 正式赛

    Scarlett的三元组 有一个长度为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\),试问有多少个三元组 \((a_i,a_j,a_k)\) 满足: \(1 \le i \lt j ...

  6. HarmonyOS Next 入门实战 - 导航框架:页面路由、组件导航(Navigation)

    页面路由 官方不推荐使用页面路由,这里仅做简单介绍. 页面路由用于标识 @Entry 注解的页面间的跳转. 包引入 import { router } from'@kit.ArkUI'; 页面跳转 r ...

  7. DataGridView频繁更新PLC报警信息数据源

    1.问题描述 当DataGridView频繁更新数据源时,可能会导致界面闪烁.性能下降等问题.这是因为每次更新数据源时,DataGridView都需要重新绘制和绑定数据,这是一个相对耗时的过程. 2. ...

  8. 腾讯云 CHDFS 助力微信秒级异常检测

    微信全景监控平台介绍 微信全景监控平台,是微信的多维指标 OLAP 监控以及数据分析平台.支持自定义多维度指标上报,海量数据实时上卷下钻分析,提供了秒级异常检测告警能力. 项目高效支撑了视频号.微信支 ...

  9. MAC brew install 跳过 update

    相信很多用 MAC 小伙伴的小伙伴都对 HomeBrew 很熟悉. 但是! 都遇到过这样的问题, 每次安装新东西, 它都要先去 update 一下, 那个耗时啊-. 怎么才能不 update, 直接安 ...

  10. 【高清视频方案分享】12G-SDI与CameraLink输入输出,基于RK3588J+FPGA工业平台

    CameraLink协议介绍 CameraLink是一种用于机器视觉和工业成像应用的标准化数字接口协议.它由自动化成像协会(Automated Imaging Association)开发,旨在解决传 ...