Spring 事務(wù)底層原理
a、劃分處理單元——IOC
由于 spring 解決的問題是對單個數(shù)據(jù)庫進行局部事務(wù)處理的,具體的實現(xiàn)首相用 spring中的 IOC 劃分了事務(wù)處理單元。并且將對事務(wù)的各種配置放到了 ioc 容器中(設(shè)置事務(wù)管理器,設(shè)置事務(wù)的傳播特性及隔離機制)。
b、AOP 攔截需要進行事務(wù)處理的類
Spring 事務(wù)處理模塊是通過 AOP 功能來實現(xiàn)聲明式事務(wù)處理的,具體操作(比如事務(wù)實行的配置和讀取,事務(wù)對象的抽象),用 TransactionProxyFactoryBean 接口來使用 AOP功能,生成 proxy 代理對象,通過 TransactionInterceptor 完成對代理方法的攔截,將事務(wù)處理的功能編織到攔截的方法中。讀取 ioc 容器事務(wù)配置屬性,轉(zhuǎn)化為 spring 事務(wù)處理需要的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(TransactionAttributeSourceAdvisor),轉(zhuǎn)化為TransactionAttribute 表示的數(shù)據(jù)對象。
c、對事物處理實現(xiàn)(事務(wù)的生成、提交、回滾、掛起)
spring 委托給具體的事務(wù)處理器實現(xiàn)。實現(xiàn)了一個抽象和適配。適配的具體事務(wù)處理器:DataSource 數(shù)據(jù)源支持、hibernate 數(shù)據(jù)源事務(wù)處理支持、JDO 數(shù)據(jù)源事務(wù)處理支持,JPA、JTA 數(shù)據(jù)源事務(wù)處理支持。這些支持都是通過設(shè)計PlatformTransactionManager、bstractPlatforTransaction 一系列事務(wù)處理的支持。 為常用數(shù)據(jù)源支持提供了一系列的 TransactionManager。
PlatformTransactionManager 實現(xiàn)了 TransactionInterception 接口,讓其與TransactionProxyFactoryBean 結(jié)合起來,形成一個 Spring 聲明式事務(wù)處理的設(shè)計體系。