標籤:nsa gem top 復原 attr ntc port 執行 rtb
@EnableXXX原理:註解上有個XXXRegistrar,或通過XXXSelector引入XXXRegistrar,XXXRegistrar實現了
ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,給容器註冊XXXCreator。這個Creator實現了後置處理器,
後置處理器在對象建立以後,封裝對象,返回一個代理對象,代理對象執行方法利用攔截器鏈進行調用
* 1)、@EnableTransactionManagement* 利用TransactionManagementConfigurationSelector給容器中會匯入組件* 匯入兩個組件* AutoProxyRegistrar* ProxyTransactionManagementConfiguration* 2)、AutoProxyRegistrar:* 給容器中註冊一個 InfrastructureAdvisorAutoProxyCreator 組件;* 利用後置處理器機制在對象建立以後,封裝對象,返回一個代理對象(增強器),代理對象執行方法利用攔截器鏈進行調用;* 3)、ProxyTransactionManagementConfiguration是個@Configuration* 1、給容器中註冊事務增強器transactionAdvisor;* 1)、事務增強器要用事務註解的資訊,AnnotationTransactionAttributeSource解析事務註解* 2)、事務攔截器transactionInterceptor:* TransactionInterceptor;儲存了事務屬性資訊,交易管理員;* TransactionInterceptor是一個 MethodInterceptor;* 在目標方法執行的時候;* 執行攔截器鏈;* 只有事務攔截器:* 1)、先擷取事務相關的屬性* 2)、再擷取PlatformTransactionManager,如果事先沒有添加指定任何transactionmanger* 最終會從容器中按照類型擷取一個PlatformTransactionManager;* 3)、執行目標方法* 如果異常,擷取到交易管理員,利用交易管理復原操作;* 如果正常,利用交易管理員,提交事務
spring 事務 @EnableTransactionManagement原理