spring 声明式事务 transaction

声明式事务处理(Declarative transactions)

我们来介绍声明式事务处理(Declarative transactions)。它是Spring目前最重要的一个应用。声明式事务处理是由Spring AOP实现的,大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。

类似于EJB的容器管理事务(Container Managed Transaction)可以在配置文件中声明对事务的支持,可以精确到单个方法的级别,这通常通过TransactionProxyFactoryBean设置Spring事务代理。我们需要一个目标对象包装在事务代理中。这个目标对象一般是一个普通Java对象的bean。当我们定义TransactionProxyFactoryBean时,必须提供一个相关的PlatformTransactionManager的引用和事务属性。事务属性含有上面描述的事务定义。

在项目中,我们使用了以下配置。

<bean id="orderService" class="org.springframework.transaction.

    interceptor.TransactionProxyFactoryBean">

 <property name="transactionManager">

  <ref local="myTransactionManager"/>

 </property>

 <property name="target"><ref local="orderTarget"/></property>

 <property name="transactionAttributes">

 <props>

    <prop key="find*">

   PROPAGATION_REQUIRED,readOnly,-OrderException

    </prop>

    <prop key="save*">

   PROPAGATION_REQUIRED,-OrderMinimumAmountException

    </prop>

    <prop key="update*">

   PROPAGATION_REQUIRED,-OrderException

    </prop>

 </props>

 </property>

</bean>

通过以上配置声明,Spring会自动帮助我们处理事务。也就是说,对于orderTarget类中的所有以find、save和update开头的方法,自动增加事务管理服务。

这里的transaction attributes属性定义在org.springframework.transaction.interceptor.Name MatchTransactionAttributeSource中的属性格式来设置。这个包括通配符的方法名称映射是很直观的。注意,save*的映射的值包括回滚规则。添加的-OrderMinimumAmountException指定,如果方法抛出OrderMinimumAmountException或它的子类,事务将会自动回滚。可以用逗号分隔定义多个回滚规则。-前缀强制回滚,+前缀指定提交(这允许即使抛出unchecked异常时也可以提交事务,当然你自己要明白自己在做什么)。

TransactionProxyFactoryBean允许你通过“preInterceptors”和“postInterceptors”属性设置“前”或“后”通知来提供额外的拦截行为。可以设置任意数量的“前”和“后”通知,它们的类型可以是Advisor(可以包含一个切入点)、MethodInterceptor或被当前Spring配置支持的通知类型(例如,ThrowAdvice、AfterReturningtAdvice或BeforeAdvice,这些都是默认支持的)。这些通知必须支持实例共享模式。如果你需要高级AOP特性来使用事务,那最好使用通用的org.springframework.aop.framework.ProxyFactoryBean,而不是TransactionProxyFactoryBean实用代理创建者。

也可以设置自动代理:配置AOP框架,不需要单独的代理定义类就可以生成类的代理。

猜你喜欢

转载自zw7534313.iteye.com/blog/1065366