Spring事務源碼梳理
- 經過註解@EnableTransactionManagement中的@Import(TransactionManagementConfigurationSelector.class)給容器中導入了兩個組件,分別是:AutoProxyRegistrar和ProxyTransactionManagementConfiguration
- AutoProxyRegistrar:它是一個後置處理器,給容器中註冊一個InfrastructureAdvisorAutoProxyCreator,InfrastructureAdvisorAutoProxyCreator利用後置處理器機制在對象建立之後,對對象進行包裝,返回一個代理對象(加強器),代理對象執行方法,利用攔截器鏈進行調用。
- ProxyTransactionManagementConfiguration:給容器中註冊事務加強器
-
- 事務加強器要用事務註解信息:AnnotationTransactionAttributeSource來解析事務註解
- 事務攔截器中:transactionInterceptor(),它是一個TransactionInterceptor(保存了事務屬性信息和事務管理器),而TransactionInterceptor是一個MethodInterceptor,在目標方法執行的時候,執行攔截器鏈,事務攔截器(首先獲取事務相關的屬性,再獲取PlatformTransactionManager,若是沒有指定任何transactionManager,最終會從容器中按照類型獲取一個PlatformTransactionManager,最後執行目標方法,若是異常,便獲取到事務管理器進行回滾,若是正常,一樣拿到事務管理器提交事務。)
歡迎關注本站公眾號,獲取更多信息