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>  

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章