Spring事務管理的底層邏輯 原始碼解析

2021-09-11 13:09:01 字數 1438 閱讀 2774

本文**為spring 5.1.2

加上@transactional註解之後,spring可以啟到事務控制的功能了,再正式執行方法前它會做一些操作,我們來看看

首先進入cglibaopproxy.classintercept方法或者jdkdynamicaopproxy.classinvoke方法(繼承介面方式),根據不同實現方法選擇不同的動態**類

cglibaopproxy.class

jdkdynamicaopproxy.class

此處動態**具體是指目標物件的目標方法,可以debug evaluate看出

進去之後我們來到reflectivemethodinvocation.class然後一步一步往下走來到invoke方法

進入invoke方法來到transactioninterceptor.class

繼續往下,進入invokewithintransaction方法,來到transactionaspectsupport.classinvokewithintransaction方法,invocation.proceedwithinvocationspring事務是環繞通知

進入createtransactionifnecessary方法,如圖

出現異常時進入completetransactionafterthrowing方法,可以看到rollback()

沒有異常則繼續往下commit

如上所說,事務最開始是先進入cglibaopproxy.classintercept方法或者jdkdynamicaopproxy.classinvoke方法,可以看出這2個類都是aop增強類,所以@transactional 事務註解才可以產生作用。

來到transactionaspectsupport.classcreatetransactionifnecessary方法

進入tm.gettransaction(txattr); 來到abstractplatformtransactionmanager.class

@transactional註解**如圖所示

來看看如果存在事務,進入handleexistingtransaction方法,如圖

簡單時序圖

Spring事務管理

spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...

spring事務管理

一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...

spring 事務管理

和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...