1. 程式人生 > >《Spring技術內幕:深入解析Spring架構與設計原理》筆記之六(Spring事務處理的實現)

《Spring技術內幕:深入解析Spring架構與設計原理》筆記之六(Spring事務處理的實現)

1.Spring與事務處理

有了Spring事務管理的支援,只需要通過一些簡單的配置,應用就能完成複雜的事務處理工作,從而為使用者使用事務處理提供很大的方便。

2.Spring事務處理的設計概覽

Spring事務處理模組中的類層次結構


在Spring事務處理中,可以通過設計一個TransactionProxyFactoryBean來使用AOP功能,通過這個TransactionProxyFactoryBean可以生成Proxy代理物件,在這個代理物件中,通過TransactionInterceptor來完成對代理方法的攔截,正是這些AOP攔截功能,將事務處理的功能編織進來。在Spring事務處理中,在實現宣告式事務處理時,這是AOP和IOC模組整合的部分。在Spring事務處理中,對主要的事務實現做了一個抽象和適配。適配的具體事務處理器包括:對DataSource資料來源的事務處理支援,對Hibernate資料來源的事務處理支援,對JDO資料來源的事務處理支援,對JPA和JTA等資料來源的事務處理支援。這一系列事務處理支援,都是通過設計PlatformTransactionManager、AbstractPlatforTransactionManager以及一系列具體事務處理器來實現,而PlatformTransactionManager又實現了TransactionInterceptor介面,通過這樣一個介面實現設計,就把這一系列的事務處理的實現與前面提到的TransactionProxyFactoryBean結合起來,從而形成了一個Spring宣告式事務處理的設計體系。

3.Spring事務處理的應用場景

Spring為常用的資料來源的事務處理支援提供一系列的TransactionManager。

4.Spring宣告式事務處理

4.1設計原理和基本過程

宣告式事務處理的步驟:

  • 讀取和處理在IOC容器中配置的事務處理屬性,並轉換為Spring事務處理需要的內部資料結構。
  • Spring事務處理模組實現統一的事務處理過程。這個通用的事務處理過程包含處理事務配置屬性,以及與執行緒繫結完成事務處理的過程,Spring通過TransactionInfo和TransactionStatus這兩個資料物件,在事務處理過程中記錄和傳遞相關執行場景。
  • 底層的事務處理實現。對於底層的事務操作,Spring委託給具體的事務處理器來完成,這些具體的事務處理器,就是在IOC容器中配置宣告式事務處理時,配置的platformTransactionManager的具體實現,比如DataSourceTransactionManager和HibernateTransactionManager等。

4.2實現分析

1.事務處理攔截器的配置

建立事務處理物件的時序圖


在建立TransactionProxyFactoryBeans的事務處理攔截器的時候,首先需要對ProxyFactory物件,從而實現AOP的使用。

2.事務處理配置的讀入

這個為事務處理服務的TransactionAttributeSourcePointcut的matches方法實現中,首先把事務方法的屬性配置讀取到TransactionAttributeSource物件中,有了這些事務處理的配置以後,根據當前方法呼叫的Method物件和目標物件,對是否需要啟動事務處理攔截器進行判斷。

3.事務處理攔截器的設計與實現

事務提交的時序圖


在這個invoke()方法的實現中,可以看到整個事務處理在AOP攔截器中實現的全過程。同時,它也是spring採用AOP封裝事務處理和實現宣告式處理的核心部分。

5.Spring事務處理的設計和實現

5.1Spring事務處理的程式設計式使用

這個程式設計式使用事務管理的過程中,沒有看到框架特性的使用,非常簡單和直接,很好地說明了事務管理的基本實現過程,以及在Spring事務處理實現中涉及一些主要的類,比如TransactionStatus、TransactionManager等,對這些類的使用與宣告式事務處理的最終實現是一樣的。

5.2事務的建立

作為宣告式事務處理實現的起始點,需要注意TransactionInterceptor攔截器的invoke回撥中使用的createTransactionIfNecessary方法,這個方法是在TransactionInterceptor的基類TransactionAspectSupport中實現的。

呼叫createTransactionIfNecessary的時序圖


5.3事務的掛起

5.4事務的提交

5.5事務的回滾

6.Spring的事務處理器的設計與實現

6.1Spring事務處理的應用場景

Spring事務管理器的類設計


6.2DataSourceTransactionManager的實現

如果使用DataSource建立事務,最終通過設定Connection的AutoCommit屬性來對事務處理進行配置。

實現DataSourceTransactionManager的時序圖


使用DataSourceTransactionManager實現事務建立、提交和回滾的過程,基本上與單獨使用Connection實現事務處理是一樣的,也是通過設定autoCommit屬性,呼叫Connection的commit和rollback方法來完成的。

6.3HibernateTransactionManager的實現

HibernateTransactionManager實現事務處理的時序圖