`
lin5061
  • 浏览: 83144 次
社区版块
存档分类
最新评论

spring中配置事务的两种方法

    博客分类:
  • Java
阅读更多

 

在spring1.2及以前,用的安定北京是spring的代理类来配置事务的,如:安定北京
 <bean id="matchAllTxInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>

 

 <bean id="autoProxyCreator"
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="interceptorNames">
   <list>
    <idref local="matchAllTxInterceptor" />
   </list>
  </property>
  <property name="proxyTargetClass">
   <value>true</value>
  </property>
  <property name="beanNames">
   <list>
    <value>*Service</value>
   </list>
  </property>
 </bean>

 

但是在spring2.0出来后,支持了aop式的事务配置,如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
    default-autowire="byName" default-lazy-init="true">

 

 <!-- 事务管理 -->
 <!-- 支持 @Transactional 标记 -->
 <tx:annotation-driven/>

 

 <!-- 支持 @AspectJ 标记-->
 <aop:aspectj-autoproxy/>

 

 <!-- 以AspectJ方式 定义 AOP -->
 <aop:config proxy-target-class="false">
  <aop:advisor pointcut="execution(* com.sitechasia.xinnet..service..*ServiceImpl.*(..))"
      advice-ref="txAdvice"/>
 </aop:config>

 

 <!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,其余方法按默认设置.
    默认的设置请参考Spring文档事务一章. -->
 <tx:advice id="txAdvice">
  <tx:attributes>
   <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
   <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
   <tx:method name="open*" propagation="REQUIRED" />
   <tx:method name="add*" propagation="REQUIRED" />
   <tx:method name="delete*" propagation="REQUIRED" />
   <tx:method name="upgrade*" propagation="REQUIRED" />
   <tx:method name="*" propagation="REQUIRED"/>
  </tx:attributes>
 </tx:advice>
</beans>
这种配置在springside里有体现.

 

但是不管是哪种配置方法,请尽量避免各种类之间的循环注入,不然的话,加上事务后会抛出org.springframework.beans.factory.BeanCurrentlyInCreationException…… in its raw version as part of a circular reference, but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final……种错误.
举个例子:如果A需要注入B,B也需要注入A,那么不配置事务的时候不会出现问题,相互注入能通过,但是配置事务后就有问题了.
其实想想,这样的相互引用是不合理的,试想,如果A和B在不同的包下,打包的时候A必需在B的基础上才能打,B必需在A的基础上才能打,那结果是两个包都打不成安定北京,除非用源代码才能打得出这样的包.安定北京

 

分享到:
评论

相关推荐

    spring3.0两种事务管理配置

    Spring 3.0 提供了两种事务管理配置方法:基于 XML 的事务管理和基于 @Transactional 的事务管理,这两种方法都是为了实现事务管理的目标,分别具有不同的配置方式和优缺点。 基于 XML 的事务管理 这种方法不需要...

    spring事务配置的五种方式

    1. **基于XML的全局事务配置**:这种方式通过在Spring配置文件中设置`&lt;tx:advice&gt;`和`&lt;aop:config&gt;`元素来实现事务管理。相比于第一种方式,这种方式更加简洁,适用于所有业务逻辑Bean。 2. **基于注解的事务配置**...

    Spring事务配置的五种方法

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

    spring几种事务配置详解【精】

    可以通过`@Transactional`注解的`timeout`属性或者XML配置中的`propagation`元素的`timeout`属性来设置事务的超时时间,单位为秒。 以上就是Spring框架中常见的事务配置方式及其相关概念,理解并熟练掌握这些知识...

    spring事务管理5种方法

    - XML配置:在Spring的配置文件中,可以使用`&lt;tx:advice&gt;`定义事务处理规则,然后通过`&lt;aop:config&gt;`或`&lt;aop:aspect&gt;`进行切面配置,将事务处理与业务代码关联。 - 注解驱动:Spring 2.5以后,推荐使用注解来管理...

    Spring自定义切面事务问题

    - **Spring 事务管理**:Spring 提供了两种事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通常更受欢迎,因为它可以通过简单的配置实现,而无需编写额外的代码。 2. **Spring 自定义切面事务失效...

    spring事务操作试验

    在描述中提到的博客文章中,作者可能详细讲解了如何配置和使用这两种事务管理方式。通常,声明式事务管理是首选,因为它更简洁且易于维护。例如,可以使用@Transactional注解在方法级别声明一个事务,该方法内的所有...

    spring事务与数据库操作

    Spring支持两种类型的事务管理:编程式事务管理和声明式事务管理。其中声明式事务管理因其易于使用和维护而被广泛采用。 ##### 1.1 Spring声明式事务介绍 Spring的声明式事务管理是通过配置文件或注解的方式来实现...

    spring声明式事务配置

    以上两种方式都是Spring框架中声明式事务管理的有效实现手段。第一种方式适用于需要对每个Bean进行精细事务控制的场景;第二种方式则更适合于希望减少配置复杂度、提高代码复用性的场景。开发人员应根据实际项目需求...

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...

    Spring事务管理A方法内部调用B方法的回滚问题测试代码

    首先,我们需要在Spring配置文件中启用事务管理器,例如使用`&lt;tx:annotation-driven&gt;`标签。这将扫描带有@Transactional注解的方法,并自动管理它们的事务边界。 ```xml &lt;!-- ... --&gt; ...

    在Spring中配置Hibernate事务

    首先,我们需要理解Spring事务管理的两种基本模式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式事务管理则通过在XML或注解中声明事务边界,让Spring...

    Spring事务管理Demo

    首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 1. **编程式事务管理**:通过使用`PlatformTransactionManager`接口及其实现类(如`JdbcTemplate`或`HibernateTemplate`),开发者...

    spring声明事务的配置

    在Spring 1.x中,声明式事务有两种主要的配置方式,第一种是通过XML配置逐个为每个业务类创建事务代理。首先,你需要声明一个事务管理器,如`HibernateTransactionManager`,然后定义业务层的bean,并为其创建一个...

    Spring JDBC与事务管理

    4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二.实验内容 (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口,编写BookShopDaoImp类实现该接口中的...

    Spring基于XML方式配置事务

    在Spring配置文件中,我们需要引入`tx`命名空间,并声明一个`PlatformTransactionManager`实例,例如,对于基于JDBC的事务管理,我们会使用`&lt;bean id="transactionManager" class="org.springframework.jdbc....

    spring五种事务配置demo

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

    Spring事务管理的三种方式

    本篇文章将详细探讨Spring中的三种事务管理方式:编程式事务管理、声明式事务管理和基于注解的事务管理。 首先,编程式事务管理是通过编码来控制事务的开始、提交、回滚等操作。Spring提供了...

    Spring源代码解析(六):Spring声明式事务处理.doc

    Spring 中的事务处理可以分为两种方式:声明式事务处理和编程式事务处理。声明式事务处理通过 AOP 的实现,把事务管理代码作为方面封装到业务代码中,使得事务管理代码和业务代码解藕。这使得事务管理变得更加灵活...

    spring声明式事务处理demo

    首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...

Global site tag (gtag.js) - Google Analytics