Spring事務處理淺析
類層次結構
在Spring的事務處理模組中.可以看到的類層次結構如圖:
可以看到,Spring事務處理模組是通過AOP功能來實現宣告式事務處理的,比如事務屬性的配置和讀取,事務物件的抽象等。因此,在Spring事務處理中,可以通過設計一個
TransactionProxyFactoryBean
來使用AOP
功能,通過這個TransactionProxyFactoryBean
可以生成Proxy
代理物件,在這個代理物件中,通過Transactionlnterceptor
來完成對代理方法的攔截,正是這些AOP
的攔截功能,將事務處理的功能編織進來。在Spring事務處理中,在實現宣告式事務處理時,這是AOP和IoC模組整合的部分。對於具體的事務處理實現,比如事
務的生成、提交、回滾、掛起等,由於不同的底層資料庫有不同的支援方式,因此,在Spring事務處理中,對主要的事務實現做了一個抽象和適配。適配的具體事務處理器包括:對DataSource資料來源的事務處理支援,對Hibernate資料來源的事務處理支援,對JDO資料來源的事務處理支援,對JPA和JTA等資料來源的事務處理支援等。這一系列的事務處理支援,都是通過設計PlatformTransactionManager
AbstractPlatforTransactionManager
以及一系列具體事務處理器來實現的,而PlatformTransactionManager
又實現了TransactionInterceptor
介面,通過這樣一個介面實現設計,就把這一系列的事務處理的實現與前面提到的TransactionProxyFactoryBean結合起來,從而形成了一個Spring宣告式事務處理的設計體系。
事務處理的實現過程
宣告式事務處理的實現大致可以分為以下幾個部分:
讀取和處理在IoC容器中配置的事務處理屬性,並轉化為Spring事務處理需要的內部資料結構。具體來說,這裡涉及的類是
TransactionAttributeSourceAdvisor
TransactionAttribute
表示的資料物件,這個資料物件是Spring對事物處理屬性值的資料抽象,對這些屬性的處理是和TransactionProxyFactoryBean
攔截下來的事務方法的處理結合起來的。Spring事務處理模組實現統一的事務處理過程。這個通用的事務處理過程包含處理事務配置屬性,以及與執行緒繫結完成事務處理的過程.Spring通過
Transactioninfo
和TransactionStatus
這兩個資料物件,在事務處理過程中記錄和傳遞相關執行場景。底層的事務處理實現。對於底層的事務操作,Spring委託給具體的事務處理器來完成,這些具體的事務處理器,就是在IoC容器中配置宣告式事務處理時,配置的
PlatformTransactionManager
的具體實現,比如DataSourceTransactionManager
和HibernateTransactionManager
等。
具體的分析,這裡就不說了,感興趣的話可以以這個大致的思路去看原始碼。