1. 程式人生 > >Spring事務處理淺析

Spring事務處理淺析

類層次結構

在Spring的事務處理模組中.可以看到的類層次結構如圖:

  1. 可以看到,Spring事務處理模組是通過AOP功能來實現宣告式事務處理的,比如事務屬性的配置和讀取,事務物件的抽象等。因此,在Spring事務處理中,可以通過設計一個TransactionProxyFactoryBean來使用AOP功能,通過這個TransactionProxyFactoryBean可以生成Proxy代理物件,在這個代理物件中,通過Transactionlnterceptor來完成對代理方法的攔截,正是這些AOP的攔截功能,將事務處理的功能編織進來。

  2. 在Spring事務處理中,在實現宣告式事務處理時,這是AOP和IoC模組整合的部分。對於具體的事務處理實現,比如事
    務的生成、提交、回滾、掛起等,由於不同的底層資料庫有不同的支援方式,因此,在Spring事務處理中,對主要的事務實現做了一個抽象和適配。適配的具體事務處理器包括:對DataSource資料來源的事務處理支援,對Hibernate資料來源的事務處理支援,對JDO資料來源的事務處理支援,對JPA和JTA等資料來源的事務處理支援等。這一系列的事務處理支援,都是通過設計PlatformTransactionManager

    , AbstractPlatforTransactionManager以及一系列具體事務處理器來實現的,而PlatformTransactionManager又實現了TransactionInterceptor介面,通過這樣一個介面實現設計,就把這一系列的事務處理的實現與前面提到的TransactionProxyFactoryBean結合起來,從而形成了一個Spring宣告式事務處理的設計體系。

事務處理的實現過程

宣告式事務處理的實現大致可以分為以下幾個部分:

  • 讀取和處理在IoC容器中配置的事務處理屬性,並轉化為Spring事務處理需要的內部資料結構。具體來說,這裡涉及的類是TransactionAttributeSourceAdvisor

    ,從名字可以看出,它是一個AOP通知器,Spring使用這個通知器來完成對事務處理屬性值的處理。處理的結果是,在IoC容器中配置的事務處理屬性資訊,會被讀入並轉化成TransactionAttribute表示的資料物件,這個資料物件是Spring對事物處理屬性值的資料抽象,對這些屬性的處理是和TransactionProxyFactoryBean攔截下來的事務方法的處理結合起來的。

  • Spring事務處理模組實現統一的事務處理過程。這個通用的事務處理過程包含處理事務配置屬性,以及與執行緒繫結完成事務處理的過程.Spring通過TransactioninfoTransactionStatus這兩個資料物件,在事務處理過程中記錄和傳遞相關執行場景。

  • 底層的事務處理實現。對於底層的事務操作,Spring委託給具體的事務處理器來完成,這些具體的事務處理器,就是在IoC容器中配置宣告式事務處理時,配置的PlatformTransactionManager的具體實現,比如DataSourceTransactionManagerHibernateTransactionManager等。

具體的分析,這裡就不說了,感興趣的話可以以這個大致的思路去看原始碼。