spring知識點5

一、AOP事務的含義:

  事務當作一個切面,動態地織入到目標對象,形成一個代理對象。

 

二、Spring的事務機制

Spring支持聲明式事務。

Spring使用事務服務代理和事務管理器(如HibernateTransactionManager)來支持事務服務。

  Spring對事務的邊界多了一種嵌套事務(PROPAGATION_NESTED)。

PROPAGATION_NESTED:

如果客戶端啓動了事務T1,那麼Bean啓動一個嵌套在T1中的子事務T2;

如果客戶端沒有啓動事務,那麼Bean會啓動一個新的事務,類似於REQUIRED_NEW

三、Spring中事務的使用

  1、Spring中使用Hibernate事務

    Step1:配置數據源

    Step2:配置sessionfactory (同上)

    Step3:配置事務管理器

    <bean id="myTransactionManager"

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

    <property name="sessionFactory">

      <ref bean="mySessionFactory" />

    </property>

    </bean> 

  Step4:創建事務服務代理

    <bean id="saleService"

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    <property name="proxyInterfaces">

    <value>lab7.SaleService</value>

    </property>

    <property name="transactionManager">

    <ref bean="myTransactionManager" />

    </property>

    <property name="target">

    <ref bean="saleServiceTarget" />

    </property>

    <property name="transactionAttributes">

    <props>

      <prop key="*">PROPAGATION_REQUIRED</prop>

    </props>

    </property>

  </bean>

事務屬性描述格式:

傳播行爲,隔離級別,只讀事務(read-only),回滾規則

 

在默認情況下,Spring的容器對於非受查異常(服務模塊中拋出的非受查異常),會回滾事務。對於受查異常,會提交事務。

如果即使發生了某種受查異常,也要回滾事務,可以用  “- 異常類型“來聲明。同樣,對於非受查異常,如果不要求回滾事務,可以用"+異常類型"來聲明。

 

  如何簡化事務配置?

    使用繼承(抽象的Service類)、自動代理。

四、Spring事務與EJB事務

  1、EJB事務:

EJB的CMT管理事務方式,只能設置事務邊界(傳播行爲),對於隔離性是不能設置的,並且EJB不支持嵌套事務。

2、Spring事務:

對於Spring來說, Spring的聲明式事務可以設置事務邊界(傳播行爲),設置隔離級別,設置只讀事務,回滾規則(+:對於任何異常都提交,-:對於任何異常都回滾)

<property name=”transactionAttributes”>

  <props>

    <prop key=”*”>+異常類型1,-異常類型2</prop>

</property>

PS:Spring對嵌套事務的支持依賴與數據庫底層對嵌套式事務的支持。

發佈了114 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章