最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

SpringBootWeb事務管理 & AOP

2023-04-14 17:47 作者:蘇喆i  | 我要投稿

目錄

事務管理

AOP基礎

AOP進階

AOP案例

一、事務管理

1.事務回顧

概念:事務是一組操作的集合,它是一個不可分割的工作單位,這些操作 要么同時成功,要么同時失敗

操作:

開啟事務(一組操作開始前,開啟事務):start transaction / begin ;

提交事務(這組操作全部成功后,提交事務):commit ;

回滾事務(中間任何一個操作出現(xiàn)異常,回滾事務):rollback ;

2.Spring事務管理

問題:即使程序運行拋出了異常,部門依然刪除了,但是部門下的員工卻沒有刪除,造成了數(shù)據(jù)的不一致。這樣我們用到了@Transactional注解。

注解:@Transactional

位置:業(yè)務(service)層的方法上、類上、接口上

作用:將當前方法交給spring進行事務管理,方法執(zhí)行前,開啟事務;成功執(zhí)行完畢,提交事務;出現(xiàn)異常,回滾事務

3.事務進階

事務屬性-回滾

rollbackFor

默認情況下,只有出現(xiàn) RuntimeException 才回滾異常。rollbackFor屬性用于控制出現(xiàn)何種異常類型,回滾事務。

事務屬性-傳播行為

propagation

事務傳播行為:指的就是當一個事務方法被另一個事務方法調用時,這個事務方法應該如何進行事務控制。

只需要關注REQUIREDREQUIRES_NEW就可以了。

REQUIRED :大部分情況下都是用該傳播行為即可。

REQUIRES_NEW :當我們不希望事務之間相互影響時,可以使用該傳播行為。比如:下訂單前需要記錄日志,不論訂單保存成功與否,都需要保證日志記錄能夠記錄成功。

小結:

1.事務

2.Spring事務管理

@Transactional

3.事務屬性

rollbackFor

propagation

二.AOP基礎

1.AOP概述

AOP:Aspect Oriented Programming(面向切面編程、面向方面編程),其實就是面向特定方法編程。

場景:案例部分功能運行較慢,定位執(zhí)行耗時較長的業(yè)務方法,此時需要統(tǒng)計每一個業(yè)務方法的執(zhí)行耗時

實現(xiàn):動態(tài)代理是面向切面編程最主流的實現(xiàn)。而SpringAOP是Spring框架的高級技術,旨在管理bean對象的過程中,主要通過底層的動態(tài)代理機制,對特定的方法進行編程。

2.AOP快速入門

Spring AOP快速入門:統(tǒng)計各個業(yè)務層方法執(zhí)行耗時

①導入依賴:在pom.xml中導入AOP的依賴

②編寫AOP程序:針對于特定方法根據(jù)業(yè)務需要進行編程

場景:

  • 記錄操作日志

  • 權限控制

  • 事務管理

  • ……

優(yōu)勢:

  • 代碼無侵入

  • 減少重復代碼

  • 提高開發(fā)效率

  • 維護方便

3.AOP核心概念

  • 連接點:JoinPoint,可以被AOP控制的方法(暗含方法執(zhí)行時的相關信息)

  • 通知:Advice,指哪些重復的邏輯,也就是共性功能(最終體現(xiàn)為一個方法)

  • 切入點:PointCut,匹配連接點的條件,通知僅會在切入點方法執(zhí)行時被應用

  • 切面:Aspect,描述通知與切入點的對應關系(通知+切入點)

  • 目標對象:Target,通知所應用的對象

AOP執(zhí)行流程

AOP執(zhí)行流程

三、AOP進階

1.通知類型

注意事項:

@Around環(huán)繞通知需要自己調用 ProceedingJoinPoint.proceed() 來讓原始方法執(zhí)行,其他通知不需要考慮目標方法執(zhí)行

@Around環(huán)繞通知方法的返回值,必須指定為Object,來接收原始方法的返回值。


@PointCut

該注解的作用是將公共的切點表達式抽取出來,需要用到時引用該切點表達式即可。

小結:

通知類型

@Before(前置通知)

@After(后置通知)

@Around(環(huán)繞通知,重點)

@AfterReturning(返回后通知,了解)

@AfterThrowing(異常后通知,了解)

2.通知順序

當有多個切面的切入點都匹配到了目標方法,目標方法運行時,多個通知方法都會被執(zhí)行。

?執(zhí)行順序

1.不同切面類中,默認按照切面類的類名字母排序:

  • 目標方法前的通知方法:字母排名靠前的先執(zhí)行

  • 目標方法后的通知方法:字母排名靠前的后執(zhí)行

2.用@Order(數(shù)字)加載切面類上來控制順序:

  • 目標方法前的通知方法:數(shù)字小的先執(zhí)行

  • 目標方法后的通知方法:數(shù)字小的后執(zhí)行

3.切入點表達式

切入點表達式@annotation

@annotation 切入點表達式,用于匹配標識有特定注解的方法。

首先自定義一個注解,用來標識方法

在方法上加入自定義注解@MyLog

小結:

1.execution(修飾符? 返回值 包名.類名.?方法名(參數(shù)) throws 異常?)

2.@annotation(注解全類名)

4.連接點

在Spring中用JoinPoint抽象了連接點,用它可以獲得方法執(zhí)行時的相關信息,如目標類名、方法名、方法參數(shù)等

  • 對于 @Around 通知,獲取連接點信息只能使用? ProceedingJoinPoint

  • 對于其他四種通知,獲取連接點信息只能使用 JoinPoint ,它是 ProceedingJoinPoint 的父類型

環(huán)繞通知@Around

四、AOP案例

將案例中 增、刪、改 相關接口的操作日志記錄到數(shù)據(jù)庫表中。

操作日志:日志信息包含:操作人、操作時間、執(zhí)行方法的全類名、執(zhí)行方法名、方法運行時參數(shù)、返回值、方法執(zhí)行時長。

思路分析:

  • 需要對所有業(yè)務類中的增、刪、改 方法添加統(tǒng)一功能,使用 AOP 技術最為方便(@around 環(huán)繞通知)

  • 由于?增、刪、改 方法名沒有規(guī)律,可以自定義@Log注解完成目標方法匹配

步驟:

1.準備:

  • 在案例工程中引入AOP的起步依賴

  • 創(chuàng)建數(shù)據(jù)庫表結構和實體類

2.編碼:

  • 自定義注解@Log

  • 定義切面類,完成記錄操作日志的邏輯

獲取當前登錄用戶:

獲取request對象,從請求頭中獲取到jwt令牌,解析令牌獲取出當前用戶的id


1.引入AOP的起步依賴:

2.創(chuàng)建數(shù)據(jù)庫:

3.實體類(pojo):

4.mapper接口(mapper):

5.自定義注解@Log(anno):

6.切面類(aop):

7.在DeptController和EmpController中的增刪改方法中加入注解@Log即可

8.啟動服務,進行測試

SpringBootWeb事務管理 & AOP的評論 (共 條)

分享到微博請遵守國家法律
四子王旗| 北辰区| 广平县| 北碚区| 上林县| 科技| 大埔区| 宣汉县| 锦州市| 清原| 宜良县| 进贤县| 建湖县| 绥德县| 积石山| 东源县| 泸溪县| 溧水县| 金堂县| 团风县| 梨树县| 临江市| 新建县| 尼木县| 中山市| 南澳县| 招远市| 达日县| 定陶县| 荥阳市| 高要市| 西盟| 吉木乃县| 咸丰县| 修武县| 潞城市| 昭苏县| 万盛区| 鄂托克旗| 阳江市| 平定县|