Spring的事務管理、AOP實現底層

目錄

spring的事務管理是如何實現的?

Spring的AOP的底層實現原理


spring的事務管理是如何實現的?

首先,spring的事務是由aop來實現的,首先要生成具體的代理對象,然后按照aop的整套流程來執行具體的操作邏輯,正常情況下要通過通知來完成核心功能,但是事務不是通過通知實現的,而是通過一個TransactionInterceptor來實現的,然后調用invoke來實現具體的邏輯。

詳細:

1、先做準備工作,解析各個方法上事務相關的屬性,根據具體的屬性來判斷是否開始新事務
2、當需要開啟的時候,獲取數據庫連接,關閉自動提交功能,開啟事務
3、執行具體的sql邏輯操作
4、在操作過程中,如果執行失敗了,那么會通過completeTransactionAfterThrowing看來完成事務
的回滾操作,回滾的具體邏輯是通過doRollBack方法來實現的,實現的時候也是要先獲取鏈接對象,通過連接對象來回滾。
5、如果執行過程中,沒有任何意外情況的發生,那么通過commitTransactionAfterReturning來完
成事務的提交操作,提交的具體邏輯是通過doCommit方法來實現的,實現的時候也要獲取鏈接,通過鏈接對象來提交
6、當事務執行完畢之后需要清除相關的事務信息cleanupTransactionInfo如果想要聊的更加細致的話,需要知道TransactionInfo,TransactionsStatus

Spring的AOP的底層實現原理

aop是ioc的一個擴展功能,aop只是在ioc的整個流程中新增的一個擴展點:BeanPostProcessor
bean的創建過程中有一個步驟可以對bean進行擴展實現,aop本身就是一個擴展功能,所以在
BeanPostProcessor的后置處理方法中來進行實現
1、代理對象的創建過程(advice,切面,切點)
2、通過jdk或者cglib的方式來生成代理對象
3、在執行方法調用的時候,會調用到生成的字節碼文件中,直接回找到DynamicAdvisoredInterceptor類中的intercept方法,從此方法開始執行
4、根據之前定義好的通知來生成攔截器
5、從攔截器鏈中依次獲取每一個通知開始進行執行,在執行過程中,為了方便找到下一個通知是哪個,會有一個CglibMethodInvocation的對象,找的時候是從-1的位置依次開始查找并且執行的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40201.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40201.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40201.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NLP - 基于bert預訓練模型的文本多分類示例

項目說明 項目名稱 基于DistilBERT的標題多分類任務 項目概述 本項目旨在使用DistilBERT模型對給定的標題文本進行多分類任務。項目包括從數據處理、模型訓練、模型評估到最終的API部署。該項目采用模塊化設計,以便于理解和維護。 項目結構 . ├── bert_dat…

蘋果AI的國產大模型之爭,沒有懸念

文 | 智能相對論 作者 | 陳泊丞 蘋果終于公布了最新的AI進程。 一個月前,正如此前預期的那樣,人工智能是今年 WWDC 發布會的焦點。全程105分鐘的主題演講,就有40多分鐘用于介紹蘋果的AI成果。 蘋果似乎還有意玩了一把“諧音梗”&#xff…

用機器改變人類方向

1800 世紀初,美國迎來了工業革命,這是一個由技術進步推動的變革時代。新機器和制造技術的引入重塑了經濟格局,提高了生產效率,同時減少了某些領域對手工勞動的需求。因此,這種轉變導致了失業。 如今,我們看…

實現點擊按鈕導出頁面pdf

在Vue 3 Vite項目中,你可以使用html2canvas和jspdf庫來實現將頁面某部分導出為PDF文檔的功能。以下是一個簡單的實現方式: 1.安裝html2canvas和jspdf: pnpm install html2canvas jspdf 2.在Vue組件中使用這些庫來實現導出功能:…

統計信號處理基礎 習題解答11-11

題目 考慮矢量MAP估計量 證明這個估計量對于代價函數 使貝葉斯風險最小。其中:, ,且. 解答 貝葉斯風險函數: 基于概率密度的非負特性,上述對積分要求最小,那就需要內層積分達到最小。令內層積分為: 上述積…

蘋果Mac電腦能玩什么游戲 Mac怎么運行Windows游戲

相對于Windows平臺來說,Mac電腦可玩的游戲較少。雖然蘋果設備的性能足以支持各種大型游戲,但由于系統以及蘋果配套服務的限制,很多游戲無法在Mac系統中運行。不過,借助虛擬機軟件,Mac電腦可以突破系統限制玩更多的游戲…

react中jsx的語法規則

1.react核心庫react.development.js 2.react_dom庫,用于支持react操作dom(react-dom.development.js) 3.引入bable,解析jsx語法的庫,用于將jsx轉換為js(babel.min.js) 上述三個庫是寫基礎react的基本庫 下面我將用…

光照老化試驗箱在化工產品暴曬測試中的應用

概述 光照老化試驗箱是一種模擬自然光照條件下材料老化情況的實驗設備,廣泛應用于化工、建材、電子、汽車等行業中對材料的耐候性、耐光性能等進行測試。通過模擬日光中的紫外線和溫度等環境因素,加速材料老化過程,以此評估材料在長期使用中…

2024阿里云大模型自定義插件(如何調用自定義接口)

1,自定義插件入口 2,插件定義:描述插件的參數 2.1,注意事項: 2.1.1,只支持json格式的參數;只支持application/JSON;如下圖: 2.1.2,需要把接口描述進行修改&a…

03:Spring MVC

文章目錄 一:Spring MVC簡介1:說說自己對于Spring MVC的了解?1.1:流程說明: 一:Spring MVC簡介 Spring MVC就是一個MVC框架,Spring MVC annotation式的開發比Struts2方便,可以直接代…

LeetCode 算法:二叉搜索樹中第K小的元素 c++

原題鏈接🔗:二叉搜索樹中第K小的元素 難度:中等???? 題目 給定一個二叉搜索樹的根節點 root ,和一個整數 k ,請你設計一個算法查找其中第 k 小的元素(從1開始計數)。 示例 1:…

網絡爬蟲之什么是代碼混淆?初步理解代碼混淆

爬蟲逆向之什么是代碼混淆?初步理解代碼混淆 在網絡爬蟲和逆向工程的過程中,代碼混淆是一項常見的技術,旨在保護代碼不被輕易理解和逆向。對于爬蟲工程師來說,理解并破解代碼混淆是一個重要的技能。本文將詳細介紹代碼混淆的基本概…

GUI開發

Question One Java 實現動作監聽,網格布局添加四個按鈕,實現四個不同的文本顯示 import java.awt.*; import java.awt.event.*; import javax.swing.*;class myGUI extends JFrame implements ActionListener{private Button b1, b2, b3, b4;private Tex…

0627,0628,0629,排序,文件

01:請實現選擇排序,并分析它的時間復雜度,空間復雜度和穩定性 void selection_sort(int arr[], int n); 解答: 穩定性:穩定, 不穩定的,會發生長距離的交換 4 9 9 4 1 &#xf…

ubuntu,linux下屏蔽壞塊方法-240625-240702封存

在windows下的屏蔽壞道的方法 機械硬盤壞道的文件系統級別的屏蔽方法_硬盤如何屏蔽壞扇區-CSDN博客 https://blog.csdn.net/cyuyan112233/article/details/139408503?spm1001.2014.3001.5502 【免費】磁盤壞道屏蔽工具磁盤壞道屏蔽工具_機械硬盤屏蔽壞扇區資源-CSDN文庫 https…

第一周題目總結

1.車爾尼有一個數組 nums ,它只包含 正 整數,所有正整數的數位長度都 相同 。 兩個整數的 數位不同 指的是兩個整數 相同 位置上不同數字的數目。 請車爾尼返回 nums 中 所有 整數對里,數位不同之和。 示例 1: 輸入&#xff1a…

【嵌入式DIY實例-ESP8266篇】-LCD ST7735顯示網絡時間

LCD ST7735顯示網絡時間 文章目錄 LCD ST7735顯示網絡時間1、硬件準備2、代碼實現本文將介紹如何使用 ESP8266 NodeMCU Wi-Fi 板實現互聯網時鐘,其中時間和日期顯示在 ST7735 TFT 顯示屏上。 ST7735 TFT是一款分辨率為128160像素的彩色顯示屏,采用SPI協議與主控設備通信。 1…

Python中的變量和數據類型:Python中有哪些基本數據類型以及變量是如何聲明的

在Python中,變量是用來存儲數據的容器,而數據類型則定義了這些數據的種類。Python是一種動態類型語言,這意味著你不需要在聲明變量時指定其類型;Python解釋器會在運行時自動確定變量的類型。 Python中的基本數據類型 Python中有…

SQL語句(DML)

DML英文全稱是Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進行增刪改等操作 DML-添加數據 insert into employee(id, workno, name, gender, age, idcard) values (1,1,Itcast,男,10,123456789012345678);select *…

AI 與數據的智能融合丨大模型時代下的存儲系統

WOT 全球技術創新大會2024北京站于 6 月 22 日圓滿落幕。本屆大會以“智啟新紀,慧創萬物”為主題,邀請到 60 位不同行業的專家,聚焦 AIGC、領導力、研發效能、架構演進、大數據等熱門技術話題進行分享。 近年來,數據和人工智能已…