`

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. }
分享到:
评论

相关推荐

    Spring学习笔记(17)----使用Spring注解方式管理事务

    在Spring的配置文件中,我们需要启用注解事务管理器。通常,我们使用`&lt;tx:annotation-driven&gt;`标签来实现这一点。例如: ```xml &lt;bean id="transactionManager" class="org.springframework.jdbc.datasource....

    spring JDBC事务管理

    2. **声明式事务管理**:这是Spring的一个强大特性,允许开发者在配置文件或注解中声明事务边界,将事务管理与业务代码分离。Spring支持基于XML的配置和基于注解的事务管理。例如,可以使用`@Transactional`注解标记...

    关于SpringMyBatis纯注解事务不能提交的问题分析与解决

    然而,在实际开发过程中,可能会遇到使用Spring MyBatis纯注解方式配置的事务无法正常提交的情况,尤其是在使用Oracle数据库时更为常见。 ### 问题描述 本文主要针对在Spring + MyBatis环境下,或使用Spring JDBC...

    Spring事务管理的jar包

    Spring还提供了丰富的事务属性,如传播行为(PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS等)、隔离级别(ISOLATION_DEFAULT、ISOLATION_READ_UNCOMMITTED等)和事务超时设置,允许开发者根据业务需求进行精细的...

    Struts2+spring注解配置简介

    Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的后端解决方案,包括依赖注入、事务管理、AOP(面向切面编程)等功能。本篇文章将详细介绍如何在Struts2和Spring框架中...

    spring3hibernate4注解是事务管理

    Spring3和Hibernate4的结合,尤其在注解事务管理方面,为开发者提供了高效、灵活且易于维护的解决方案。本文将深入探讨Spring3和Hibernate4如何通过注解进行事务管理,以及其背后的工作原理和优势。 首先,让我们...

    spring_如何管理事务的

    Spring通过AOP(面向切面编程)技术实现了声明式事务管理,可以通过XML配置或注解来实现。 ##### 1. XML配置示例 ```xml &lt;!-- 定义数据源 --&gt; &lt;!-- 配置数据源参数 --&gt; &lt;!-- 定义事务管理器 --&gt; ...

    Spring事务管理的几种配置方式,

    总结,Spring的事务管理配置方式多样,可以根据项目需求选择合适的方案。声明式事务管理简化了代码,提高了可维护性,而编程式事务管理则提供了更大的灵活性。无论哪种方式,了解其原理和使用场景对于开发高效、可靠...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    如果采用XML配置方式,则需要在Spring的XML配置文件中进行事务配置,并通过aop命名空间来定义事务通知及切点,从而实现声明式事务管理。 对于开发者而言,Spring与MyBatis的整合简化了事务和持久层的处理,减少了...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring注解是Spring框架中的一大特色,它极大地简化了配置过程,让代码更加简洁易读。注解如`@Component`、`@Service`、`@Repository`和`@Controller`用于标记不同层次的Bean,而`@Autowired`则负责自动装配Bean之间...

    spring事务详解

    总之,Spring事务框架提供了一套功能强大、易于使用的事务管理解决方案,它不仅可以减少代码量,提高开发效率,还可以通过声明式配置来提升代码的可读性和可维护性。对于希望深入学习Spring事务管理的开发者而言,...

    spring事务管理

    Spring支持多种事务配置方式,包括但不限于: 1. **声明式事务管理**:通过XML配置文件或注解的方式配置事务管理策略。这种方式使得业务逻辑更加清晰,不需要在代码中显式地进行事务控制。 2. **编程式事务管理**...

    Spring2.0 事务处理

    在IT行业中,Spring框架是...Spring 2.0引入了基于AOP(面向切面编程)的声明式事务管理,使得事务配置更加直观。 在`applicationContext.xml`配置文件中,我们可以设置事务管理器和声明事务的行为。例如: ```xml ...

    spring 的事务管理手册

    声明式事务管理则通过配置文件或注解来定义事务规则,简化了事务管理,降低了代码的复杂度,同时也提供了诸如隔离级别和超时时间等高级特性。 Spring的事务管理不仅限于JDBC,还支持Hibernate、JDO、OJB等持久层...

    Spring+JOTM 分布式事务管理

    Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...

    spring mvc+ibatis+spring注解

    Spring MVC、iBatis 和 Spring 注解是Java开发中常用的技术栈,它们分别负责Web层、数据访问层和依赖注入及配置。这篇文章将详细介绍这三个组件的结合使用以及相关的知识点。 **Spring MVC** Spring MVC 是 Spring ...

    Spring事务管理和SpringJDBC思维导图

    声明式事务管理是通过配置或注解来实现的,如@Transactional注解,使得开发者无需手动管理事务的开始、提交和回滚。编程式事务管理则需要通过TransactionTemplate或者直接使用PlatformTransactionManager接口来控制...

    spring简单注解+log4j记录日志

    AOP是Spring框架的一个重要特性,允许我们在不修改源代码的情况下,通过"切面"来关注代码中的横切关注点,如事务管理、日志记录等。我们可以创建一个切面类,使用`@Aspect`注解,并在其中定义通知(advice),如`@...

    spring 的3种事务配置方式

    本文将详细介绍Spring中的三种事务配置方式:编程式事务管理、声明式事务管理以及基于注解的事务管理。 **1. 编程式事务管理** 编程式事务管理是通过编程的方式手动控制事务的开始、提交、回滚等操作。主要使用`...

Global site tag (gtag.js) - Google Analytics