`

spring 注解事务管理配置方案

 
阅读更多

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

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

Java代码

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  4. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  5. </bean>
  6. <!-- 定义事务管理器(声明式的事务) -->
  7. <bean id="transactionManager"
  8. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  9. <property name="sessionFactory" ref="sessionFactory" />
  10. </bean>
  11. <!-- 配置DAO -->
  12. <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
  13. <property name="sessionFactory" ref="sessionFactory" />
  14. </bean>
  15. <bean id="userDao"
  16. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  17. <!-- 配置事务管理器 -->
  18. <property name="transactionManager" ref="transactionManager" />
  19. <property name="target" ref="userDaoTarget" />
  20. <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
  21. <!-- 配置事务属性 -->
  22. <property name="transactionAttributes">
  23. <props>
  24. <prop key="*">PROPAGATION_REQUIRED</prop>
  25. </props>
  26. </property>
  27. </bean>
  28. lt;/beans>

 

 

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

Java代码

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  4. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  5. </bean>
  6. <!-- 定义事务管理器(声明式的事务) -->
  7. <bean id="transactionManager"
  8. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  9. <property name="sessionFactory" ref="sessionFactory" />
  10. </bean>
  11. <bean id="transactionBase"
  12. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  13. lazy-init="true" abstract="true">
  14. <!-- 配置事务管理器 -->
  15. <property name="transactionManager" ref="transactionManager" />
  16. <!-- 配置事务属性 -->
  17. <property name="transactionAttributes">
  18. <props>
  19. <prop key="*">PROPAGATION_REQUIRED</prop>
  20. </props>
  21. </property>
  22. </bean>
  23. <!-- 配置DAO -->
  24. <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
  25. <property name="sessionFactory" ref="sessionFactory" />
  26. </bean>
  27. <bean id="userDao" parent="transactionBase" >
  28. <property name="target" ref="userDaoTarget" />
  29. </bean>
  30. </beans>

 

 

第三种方式:使用拦截器

Java代码

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  4. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  5. </bean>
  6. <!-- 定义事务管理器(声明式的事务) -->
  7. <bean id="transactionManager"
  8. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  9. <property name="sessionFactory" ref="sessionFactory" />
  10. </bean>
  11. <bean id="transactionInterceptor"
  12. class="org.springframework.transaction.interceptor.TransactionInterceptor">
  13. <property name="transactionManager" ref="transactionManager" />
  14. <!-- 配置事务属性 -->
  15. <property name="transactionAttributes">
  16. <props>
  17. <prop key="*">PROPAGATION_REQUIRED</prop>
  18. </props>
  19. </property>
  20. </bean>
  21. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  22. <property name="beanNames">
  23. <list>
  24. <value>*Dao</value>
  25. </list>
  26. </property>
  27. <property name="interceptorNames">
  28. <list>
  29. <value>transactionInterceptor</value>
  30. </list>
  31. </property>
  32. </bean>
  33. <!-- 配置DAO -->
  34. <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
  35. <property name="sessionFactory" ref="sessionFactory" />
  36. </bean>
  37. </beans>

 

 

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

Java代码

  1. <context:annotation-config />
  2. <context:component-scan base-package="com.bluesky" />
  3. <bean id="sessionFactory"
  4. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  5. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  6. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  7. </bean>
  8. <!-- 定义事务管理器(声明式的事务) -->
  9. <bean id="transactionManager"
  10. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  11. <property name="sessionFactory" ref="sessionFactory" />
  12. </bean>
  13. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  14. <tx:attributes>
  15. <tx:method name="*" propagation="REQUIRED" />
  16. </tx:attributes>
  17. </tx:advice>
  18. <aop:config>
  19. <aop:pointcut id="interceptorPointCuts"
  20. expression="execution(* com.bluesky.spring.dao.*.*(..))" />
  21. <aop:advisor advice-ref="txAdvice"
  22. pointcut-ref="interceptorPointCuts" />
  23. </aop:config>
  24. </beans>

 

 

第五种方式:全注解

Java代码

  1. <context:annotation-config />
  2. <context:component-scan base-package="com.bluesky" />
  3. <tx:annotation-driven transaction-manager="transactionManager"/>
  4. <bean id="sessionFactory"
  5. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  6. <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  7. <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
  8. </bean>
  9. <!-- 定义事务管理器(声明式的事务) -->
  10. <bean id="transactionManager"
  11. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  12. <property name="sessionFactory" ref="sessionFactory" />
  13. </bean>
  14. </beans>

 

 

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

Java代码

  1. package com.bluesky.spring.dao;
  2. import java.util.List;
  3. import org.hibernate.SessionFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  6. import org.springframework.stereotype.Component;
  7. import com.bluesky.spring.domain.User;
  8. @Transactional
  9. @Component("userDao")
  10. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
  11. public List<User> listUsers() {
  12. return this.getSession().createQuery("from User").list();
  13. }
  14. }
分享到:
评论

相关推荐

    spring2.5学习PPT 传智博客

    使用Spring注解方式管理事务与传播行为详解 24.使用Spring配置文件实现事务管理 25.搭建和配置Spring与Hibernate整合的环境 26.Spring集成的Hibernate编码与测试 27.Struts与Spring集成方案1(Struts集成Spring) ...

    spring杂谈 作者zhang KaiTao

    1.10 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。 1.11 在spring中获取代理对象代理的目标对象工具类 1.12 如何为spring代理类设置属性值 1.13 我对SpringDAO层支持...

    Spring攻略(第二版 中文高清版).part1

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring攻略(第二版 中文高清版).part2

    13.6 管理集成测试中的事务 530 13.6.1 问题 530 13.6.2 解决方案 530 13.6.3 工作原理 531 13.7 在集成测试中访问数据库 536 13.7.1 问题 536 13.7.2 解决方案 536 13.7.3 工作原理 537 13.8 使用...

    Spring.3.x企业应用开发实战(完整版).part2

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring中文帮助文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    Spring API

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...

    Spring 2.0 开发参考手册

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...

    基于spring-boot+quartz的CRUD任务管理系统.zip

    Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言...

    图书管理系统(struts+hibernate+spring)130225.rar

    此外,Spring框架的引入为系统带来了一系列企业级的服务,如事务管理、安全性控制等,这些服务的配置和管理都通过Spring的IoC容器优雅地解决,进一步保障了系统的稳定运行和数据一致性。整体而言,这个图书管理系统...

    Spring3.x企业应用开发实战(完整版) part1

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    spring chm文档

    2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...

    Springboot、SpringCloud开发脚手架,集合各种常用框架使用案例.zip

    Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供...

    Spring2.5的新特性

    该项目提供了基于Spring的Java EE 5编程模型的实现,包括支持用于注入(injection)、拦截( interception)和事务处理(transactions)的JSR-250注解和EJB 3注解(JSR-220)。 在2.5版本中,Spring框架的核心(core)...

    swagger-spring-boot-starter 是一款建立在swagger基础之上的工具包.zip

    Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供...

    Spring in Action(第2版)中文版

    6.1.2理解spring对事务管理的支持 6.2选择事务管理器 6.2.1jdbc事务 6.2.2hibernate事务 6.2.3jpa事务 6.2.4jdo事务 6.2.5jta事务 6.3在spring中编写事务 6.4声明式事务 6.4.1定义事务参数 6.4.2代理事务 ...

    Spring in Action(第二版 中文高清版).part2

    6.1.2 理解Spring对事务管理的支持 6.2 选择事务管理器 6.2.1 JDBC事务 6.2.2 Hibernate事务 6.2.3 JPA事务 6.2.4 JDO事务 6.2.5 JTA事务 6.3 在Spring中编写事务 6.4 声明式事务 6.4.1 定义事务参数 ...

    Spring in Action(第二版 中文高清版).part1

    6.1.2 理解Spring对事务管理的支持 6.2 选择事务管理器 6.2.1 JDBC事务 6.2.2 Hibernate事务 6.2.3 JPA事务 6.2.4 JDO事务 6.2.5 JTA事务 6.3 在Spring中编写事务 6.4 声明式事务 6.4.1 定义事务参数 ...

Global site tag (gtag.js) - Google Analytics