前言
SpringBoot事務的源碼就是通過AOP原理實作了,也是有切面的相關概念,當要執行個體化的Bean有事務增強器的時候會生成一個代理對象,然後先調用通知的方法進行攔截也就是事務開啟、關閉、復原等。然後再調用業務邏輯處理,本篇文章我先主要分析一下事務源碼裡面有哪些元件。
事務一些重要的元件類
TransactionAttribute
存儲了@Transaction注解的一些資訊,如隔離級别、傳播特性等,它的實作是RuleBasedTransactionAttribute,我們看下該對象具體有哪些屬性值,通過下圖我們知道該對象就是包裝了使用者使用@Transaction注解時指定的屬性值
TransactionAttribute運作資料截圖
TransactionManager
事務管理器,它的預設實作是DataSourceTransactionManager,我們看看這個類具體有哪些屬性值
DataSourceTransactionManager運作資料截圖
可以看出事務管理器中包含資料源資訊,它能利用資料源擷取一個資料庫的連接配接進行相關的資料操作。
TransactionStatus
事務狀态對象,它的預設實作是DefaultTransactionStatus,該對象儲存着事務運作過程中的一些屬性,目前是否是一個新事務、事務儲存點、是否需要復原、還儲存着挂起事務的連接配接資源我們看看該對象運作過程的屬性值
DefaultTransactionStatus運作資料截圖
TransactionInfo
事務中最重要的一個類就是該對象,它圍繞了整個事務執行過程,它包含了資料源對象(TransactionManager)、事務隔離級别、傳播特性(TransactionAttribute)、目前事務狀态對象(TransactionStatus)、還有被挂起的事務的TransactionInfo。
TransactionInfo運作資料截圖
TransactionInterceptor
用于實作事務管理的核心,TransactionInterceptor 使用 Spring AOP 來實作方法攔截。它将事務管理邏輯織入到目标方法的執行流程中,確定在方法執行前開啟事務,在方法執行後送出或復原事務,如果目标方法抛出未檢查異常則 TransactionInterceptor 會復原事務。
ConnectionHolder
該對象就是包含了資料庫連接配接的Connection對象。
BeanFactoryTransactionAttributeSourceAdvisor
它是Spring 架構中用于支援聲明式事務管理的一個關鍵元件。它是一個切面通知器(Advisor),主要用于從 Spring 的 BeanFactory 中擷取事務屬性(TransactionAttribute)并将其應用于被 @Transactional 注解标記的方法。
這篇文章主要簡單的說明了事務管理中涉及的一些元件類,關于它們是如何加載到Spring容器内部的我将在下篇文章分析,如果大家喜歡我的文章請點贊關注,我們下期見。