分享

springmvc aop 事务代理bean

 rui5327 2011-11-03
spring的声明式事务共有三种:一种是基于aop代理bean的方式;一种是基于简单的xml声明的tx命名空间的方式;最后一种是注释驱动事务。先来说一下spring定义事务的几个参数:传播行为、隔离级别、只读、事务超时、回滚规则。下面定义的是第一种声明式事务(基于aop代理bean的方式):
Xml代码 复制代码 收藏代码
  1. <bean id=”someService” class=” org.springframework.Transaction.interceptor.TransactionProxyFactoryBean”>
  2. <property name=”target” ref=”someServiceTarget” />
  3. <property name=”proxyInterfaces” ref=”com.alibaba.service.SomeService” />
  4. <property name=” transactionManager” ref=” transactionManager” />
  5. <property name=” transactionAttributes”>
  6. <props>
  7. <prop key=”add*”></props>
  8. <prop key=”*”></props>
  9. </props>
  10. </property>
  11. </bean>

上面的transactionManager可以是前面提到的任何一种spring事务管理器。而transactionAttributes属性则是指明了事务的具体参数。它含有一个props集,该集含有N个prop属性,每个<prop>的键是一个方法名称的模式,而其具体指则是事务的具体参数。其中事务的具体参数的顺序为:传播行为(必选)、隔离级别(可选)、是否只读(可选)、回滚规则(可选),他们之间以逗号隔开。

事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,

它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

事务传播行为类型

事务传播行为类型

说明

PROPAGATION_REQUIRED

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS

支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY

使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW

新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED

以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER

以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多