Spring事务管理之二

Spring 编程式事务和声明式事务的区别 

  编程式事务处理:所谓编程式事务指的是通过编码方式实现事务,允许用户在代码中精确定义事务的边界。即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

  声明式事务处理:管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

  简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现。

基于注解@Transactional的事务实现

<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       <property name="dataSource" ref="dataSource"></property>

</bean>

 <!-- 使得事务注解生效 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

【总结】:基于声明式的事务就是上面用的这种方法

第一步:在spring配置中配置事务管理器

第二步:在需要使用事务的方法前面加上@Transactional注解

 

使用tx标签配置的拦截器

  <bean id="sessionFactory"    

         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    

         <property name="configLocation" value="classpath:hibernate.cfg.xml" />    

        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  

  </bean>    

 

 <!-- 定义事务管理器(声明式的事务) -->    

 <bean id="transactionManager"  

       class="org.springframework.orm.hibernate3.HibernateTransactionManager">  

     <property name="sessionFactory" ref="sessionFactory" />  

  </bean>  

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

       <tx:attributes>  

              <tx:method name="*" propagation="REQUIRED" />  

      </tx:attributes>  

</tx:advice>     

 <aop:config>  

       <aop:pointcut id="interceptorPointCuts"     expression="execution(* com.bluesky.spring.dao.*.*(..))" />  

       <aop:advisor advice-ref="txAdvice"    pointcut-ref="interceptorPointCuts" />          

 </aop:config>        

</beans>  

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值