1. 程式人生 > >Spring事務原始碼梳理

Spring事務原始碼梳理

  1. 通過註解@EnableTransactionManagement中的@Import(TransactionManagementConfigurationSelector.class)給容器中匯入了兩個元件,分別是:AutoProxyRegistrar和ProxyTransactionManagementConfiguration
  2. AutoProxyRegistrar:它是一個後置處理器,給容器中註冊一個InfrastructureAdvisorAutoProxyCreator,InfrastructureAdvisorAutoProxyCreator利用後置處理器機制在物件建立以後,對物件進行包裝,返回一個代理物件(增強器),代理物件執行方法,利用攔截器鏈進行呼叫。
  3. ProxyTransactionManagementConfiguration:給容器中註冊事務增強器
    • 事務增強器要用事務註解資訊:AnnotationTransactionAttributeSource來解析事務註解
    • 事務攔截器中:transactionInterceptor(),它是一個TransactionInterceptor(儲存了事務屬性資訊和事務管理器),而TransactionInterceptor是一個MethodInterceptor,在目標方法執行的時候,執行攔截器鏈,事務攔截器(首先獲取事務相關的屬性,再獲取PlatformTransactionManager,如果沒有指定任何transactionManager,最終會從容器中按照型別獲取一個PlatformTransactionManager,最後執行目標方法,如果異常,便獲取到事務管理器進行回滾,如果正常,同樣拿到事務管理器提交事務。)