spring 事務 @EnableTransactionManagement原理


@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)、執行目標方法 * 如果異常,獲取到事務管理器,利用事務管理回滾操作; * 如果正常,利用事務管理器,提交事務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM