Spring的交易管理實現原理初探

來源:互聯網
上載者:User

這裡主要是通過分析部分源碼進行剖析Spring交易管理的實現原理。

再分析源碼前,現從理論上大概分析哈:

純JDBC操作資料庫的基本步驟:

1. 擷取串連 Connection conn = DriverManager.getConnection()

2. 開啟事務conn.setAutoCommit(true/false);

3. 執行CRUD

4. 提交事務/復原事務 conn.commit()  /  conn.rollback();

5. 關閉串連 conn.close();

使用Spring的交易管理功能後,我們可以不再寫步驟 2 和 3 的代碼,而是由Spirng 自動完成。

那麼Spring是如何在我們書寫的 CRUD 之前和之後開啟事務和關閉事務的呢。解決這個問題,也就可以從整體上理解Spring的交易管理實現原理了。

學過Java代理的就可能立馬知道是怎麼回事了,所以這裡就不再贅述Java代理知識了。

這裡具體集合Spring進行分析哈:

1. 在applicationContext.xml檔案中開啟Spring的事務功能:

<tx:annotation-driven transaction-manager="myTxManager" />
再設定檔中,配置上面的資訊,進可以開啟Spring的交易管理功能。當然這事基於註解事務的。開啟這個,代碼中的Transactional註解才會起作用。

配置上面的資訊後,Spring在初始化包含Transactional註解的類時,會自動產生這些類的代理,並放置再容器中,以便備用。如:

總結:Spring的交易管理的內部實現是利用了代理技術。(這句話不知道是不是多餘, -_-   歡迎吐嘈,拍磚哈)

@Transactional@Servicepublic class ProductTypeServiceImpl extends AbstractDao implements ProductTypeService {public ProductTypeServiceImpl () {System.out.println("***************************************************");System.out.println("class ProductTypeServiceImpl initialized");System.out.println("***************************************************");}}


Spring產生的代理類,如圖:




開啟事務:



提交事務:



在applicationContext.xml檔案中,沒有配置 <tx:annotation-driven>標籤時,截圖如下:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.