spring事务处理

 

一、            spring事务处理

 

1、事务的处理也交给了spring来管理,要在applicationContext.xml文件中上配置事务管理类:

//实施事务管理的bean

<bean id=”transactionManager”

class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>

       <property name=”sessionFactory”>

           <ref bean=”sessionFactory” />

</property>

</bean>

它是通过sessionFactory来管理,因此在传进来一个sessionFactory来接管事务处理。

 

1、 声明式事务处理:

spring中对事务进行管理时,可以显示地进行事务处理的定义:

//给事务添加的属性

<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>

     <tx:attributes >

//propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。

          <tx:method name=”add*” propagation=”REQUIRED”>

          <tx:method name=”delete*” propagation=”REQUIRED”>

           <tx:method name=”update*” propagation=”REQUIRED”>

//如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。

           <tx:method name=”*” read-only=”true”>

</tx:attributes>

</tx:advice>

对于事务的其它传播属性,则可以参考其它文档进行相关的了解。

 

上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是<aop:config/> 的定义,它确保由 'txAdvice' bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹配 HibernateDAO 接口定义的所有操作,我们把该切面叫做 'allManagerMethod'。然后我们用一个通知器(advisor)把这个切面与 'txAdvice' 绑定在一起,表示当 'allManagerMethod' 执行时,'txAdvice' 定义的通知事务逻辑将被执行。这就是AOP切面工程:

<aop:config>

      <aop:pointcut id=”allManagerMethod”

expression=”execution(*  com.hejianjiao.hibernate.HibernateDAO.*(..))”/>

//调用上面配置的事务属性,可以将它给本aop pointcut

      <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>

//如果还有其它的定义,则可以再加上pointcutadvisor来定义本切面点的事务逻辑。

</aop:config>

//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:*  com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。

上面的配置将为由 'HibernateDAO' 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。

 

 

3、编程式事务处理:

这个方法是使用注入的方式来对事务进行限制操作,使用TransactionTemplatePlatformTransactionManager类进行方法的限制。

1、  第一种方式使用TransactionTemplate

2、  第二种方是式是使用PlatformTransactionManager

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值