使用基于注解的AOP的事务管理 @Transaction (转)

Spring Transaction

Spring 2011-04-15 19:25:24 阅读12 评论0   字号: 订阅

<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^^ Hibernate_Transaction ^^^^^^^^^^^^^^^^^^^^^^^^^^ -->
 <bean id="tx_manager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />  
 </bean>
 <tx:annotation-driven transaction-manager="tx_manager" />

 

Spring事物管理

@Transactional(propagation = Propagation.MANDATORY)---强制的(必须有transaction

@Transactional(propagation = Propagation.NESTED)----------内嵌的transaction

@Transactional(propagation = Propagation.NEVER)------------绝不能有transaction

@Transactional(propagation = Propagation.NOT_SUPPORTED)--方法要执行,遇到的transaction挂起。

@Transactional(propagation = Propagation.REQUIRED)   --------------必须的(默认的)

@Transactional(propagation = Propagation.REQUIRES_NEW)---------方法要执行,遇到的transaction挂起,创建新的transaction

@Transactional(propagation = Propagation.SUPPORTS)----------------有没有无所谓

============================================================================================

<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^^ AOP ^^^^^^^^^^^^^^^^^^^^^^^^^^ -->
 <!-- AOP 动态代理  代理切点类 (例:userDAO) -->
 
 <tx:advice id="tx_Advice" transaction-manager="tx_manager">
  <tx:attributes>
   <tx:method name="get*" read-only="true"/>
   <tx:method name="add*" propagation="REQUIRED"/>
  </tx:attributes>
 </tx:advice>

 <aop:config>
  <aop:pointcut id="servicePointCut"
   expression="execution(* com.cui.service..*(..))" />
  <aop:advisor pointcut-ref="servicePointCut" advice-ref="tx_Advice" />
 </aop:config>



使用基于注解的AOP的事务管理

@Transactional

1. 例子
Transactional(readOnly = true, propagation=Propagation.REQUIRED)  

@Transactional(propagation=Propagation.REQUIRED)
public TradeData placeTrade(TradeData trade) throws Exception {...}


@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public TradeData placeTrade(TradeData trade) throws Exception {...}



2. xml 配置

<beans>

<tx:annotation-driven transaction-manager="transactionManager"/>
//使用@Transactional 注解创建恰当的事务管理切面

<aop:aspectj-autoproxy/>// 通知匹配的bean

<beans>




3. <tx:annotation-driven>标签


<tx:annotation-driven>标签是使用注解驱动的事务管理支持的核心, 所有属性如下



transactionManager:  指定到现有的PlatformTransactionManger bean 的引用, 通知会使用该引用

mode: 指定spring事务管理框架创建通知bean的方式,可用的有proxy  和 aspectj, 前者是默认值, 表示通知对象是个jdk代理,后者表示spring aop会使用ajpectj创建代理

order: 指定创建切面的顺序, 只要目标对象有多个通知就可以使用该属性

proxy-target-class: 该属性如果为true , 就表示你想要代理目标类而不是bean 所实现的所有接口


4. @Transactional           

所有属性

propagation: 指定事务定义中使用的传播

isolation: 指定事务的隔离级别

timeout: 超时时间

readonly : 如果为true, 事务标致为只读

noRollbackFor: 目标方法可抛出的异常所构成的数组,但通知仍会提交事务

rollbackFor: 异常所构成的数组,如果目标方法抛出了这些异常,通知就会回滚


5. 缺点

  a. 不的不为所有需要事务的方法加上@Transactional

    b. 把@Transactional 加在整个类上, 不需要事务的方法也运行在事务中


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值