日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【SSM面向CRUD编程专栏 7】springAop 事务控制

發(fā)布時(shí)間:2025/3/8 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSM面向CRUD编程专栏 7】springAop 事务控制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

🛫更多ssm知識(shí)見SSM_面向CRUD編程專欄

🚕本博客總結(jié)自黑馬程序員的ssm框架視頻

🚒博主對(duì)于該知識(shí)尚在學(xué)習(xí)階段

🚄如果發(fā)現(xiàn)存在問題請(qǐng)毫不吝嗇的指出

🚀🚀扎哇太棗糕的博客主頁(yè)🚀🚀

目錄

1 Spring AOP

2 使用AOP開發(fā)

3 spring的事務(wù)控制


1 Spring AOP

????????AOP(Aspect Oriented Programming)意思是面向切面編程,是通過預(yù)編譯的方式和運(yùn)行期間動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP(面向?qū)ο缶幊?的延續(xù),是函數(shù)式編程的一種衍生范型,利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯個(gè)部分之間的耦合性降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。

????????AOP可以在程序運(yùn)行期間,在不修改源碼的情況下對(duì)方法進(jìn)行功能的增強(qiáng)。它的優(yōu)勢(shì)就是可以減少重復(fù)代碼,提高開發(fā)效率,并且便于維護(hù)。

底層實(shí)現(xiàn)

????????AOP的底層通過Spring提供的動(dòng)態(tài)代理技術(shù)實(shí)現(xiàn),在運(yùn)行期間,Spring通過動(dòng)態(tài)代理技術(shù)動(dòng)態(tài)的生成代理對(duì)象,代理對(duì)象方法執(zhí)行時(shí)進(jìn)行增強(qiáng)功能的介入,再去調(diào)用目標(biāo)對(duì)象的方法,從而完成功能的增強(qiáng)。

相關(guān)名詞概念

  • Target(目標(biāo)對(duì)象):也就是被代理類對(duì)象
  • Proxy(代理):一個(gè)類被AOP增強(qiáng)后return的對(duì)象就是代理類對(duì)象
  • JoinPoint(連接點(diǎn)):每個(gè)被攔截到的方法就是一個(gè)連接點(diǎn),這里點(diǎn)指的是方法,因?yàn)閟pring只支持方法類型的連接點(diǎn)
  • Pointcut(切入點(diǎn)):需要被增強(qiáng)的每個(gè)方法就是一個(gè)切入點(diǎn)
  • Advice(增強(qiáng)):用于定義功能增強(qiáng)方法
  • Aspect(切面):切入點(diǎn)加增強(qiáng)就是切面
  • Weaving(織入):將切入點(diǎn)的方法進(jìn)行增強(qiáng)的過程就被稱為織入,spring采用動(dòng)態(tài)代理織入,而AspectJ采用編譯器織入和類裝載期織入。

常用的兩種動(dòng)態(tài)代理技術(shù)

  • JDK代理:基于接口的動(dòng)態(tài)代理技術(shù),有接口時(shí)使用
  • cglib代理:基于父類的動(dòng)態(tài)代理技術(shù),無(wú)接口時(shí)使用

JDK代理

第一步:創(chuàng)建一個(gè)公共接口

?第二步:創(chuàng)建一個(gè)被代理類實(shí)現(xiàn)公共接口

?第三步:創(chuàng)建一個(gè)功能增強(qiáng)類

?第四步:測(cè)試類,利用反射創(chuàng)建代理類調(diào)用增強(qiáng)方法

測(cè)試結(jié)果:

cglib代理

第一步:導(dǎo)入相應(yīng)的依賴jar包

? ? ? ? 由下圖可知,cglib的包已經(jīng)被封裝到spring-core中它又被封裝在spring-context中,故只需要導(dǎo)入spring-context的依賴就可以使用cglib

?第二步:創(chuàng)建一個(gè)被代理類

第三步:創(chuàng)建一個(gè)功能增強(qiáng)類

第四步:測(cè)試類,利用反射創(chuàng)建代理類調(diào)用增強(qiáng)方法

?測(cè)試結(jié)果:

2 使用AOP開發(fā)

? ? ? ? AOP開發(fā)需要編寫目標(biāo)類的目標(biāo)方法、編寫切面類內(nèi)置功能增強(qiáng)方法、配置配置文件將切入點(diǎn)與增強(qiáng)方法相結(jié)合。spring框架會(huì)監(jiān)控切入點(diǎn)方法的執(zhí)行,一旦監(jiān)控到切入點(diǎn)方法執(zhí)行就會(huì)動(dòng)態(tài)的使用代理機(jī)制創(chuàng)建代理類對(duì)象,并在相應(yīng)位置將增強(qiáng)與切入點(diǎn)進(jìn)行織入。spring框架會(huì)根據(jù)目標(biāo)類是否實(shí)現(xiàn)了接口來決定使用JDK和cglib中的哪一種動(dòng)態(tài)代理模式

基于xml的AOP開發(fā)

第一步:導(dǎo)入相關(guān)依賴

?第二步:創(chuàng)建一個(gè)公共接口和目標(biāo)類

?第三步:創(chuàng)建一個(gè)切面類內(nèi)置增強(qiáng)方法

第四步:配置配置文件(創(chuàng)建對(duì)象的bean標(biāo)簽、配置織入關(guān)系)

測(cè)試類及結(jié)果:

? ? ?

?? 通知類型

? ?

?? ?切點(diǎn)表達(dá)式的寫法:

🔴訪問修飾符可以省略不寫🔴返回值類型、方法全限名里的具體項(xiàng)可以使用*代表任意🔴包名與類名之間一個(gè)點(diǎn).代表當(dāng)前包下的類,兩個(gè)點(diǎn)..代表當(dāng)前包及其子包下的類🔴參數(shù)可以使用兩個(gè)點(diǎn)..代表任意(任意個(gè)數(shù)、任意類型)

舉例如下:對(duì)照上述要求理解記憶

?? 切點(diǎn)表達(dá)式的抽取??

??

?? 環(huán)繞式增強(qiáng)方法

? ??

? ??

基于注解的AOP開發(fā)

第一步:導(dǎo)入相關(guān)依賴

第二步:創(chuàng)建一個(gè)公共接口和目標(biāo)類

第三步:創(chuàng)建一個(gè)切面類內(nèi)置增強(qiáng)方法

第四步:配置配置文件(開啟組件掃描、AOP自動(dòng)代理)

?測(cè)試類:

3 spring的事務(wù)控制

編程式事務(wù)控制三個(gè)對(duì)象

🔴平臺(tái)事務(wù)管理器對(duì)象

????????PlatformTransactionManager接口是spring的事務(wù)管理器,他里面提供了我們常用的操作事務(wù)的方法。

🔴事務(wù)定義對(duì)象

? ? ? ? TransactionDefinition內(nèi)部封裝控制事務(wù)的一些參數(shù)事務(wù)隔離級(jí)別

? ? ? ? 事務(wù)隔離性控制不好的情況下,會(huì)產(chǎn)生以下三個(gè)問題:臟讀、不可重復(fù)度、幻讀

一共有以下五種事務(wù)隔離級(jí)別

  • ISOLATION_DEFAULT:默認(rèn)
  • ISOLATION_READ_UNCOMMITTED:讀未提交
  • ISOLATION_READ_COMMITTED:讀已提交(解決臟讀)
  • ISOLATION_REPEATABLE_READ:可重復(fù)讀(解決不可重復(fù)讀)
  • ISOLATION_SERIALIZABLE:串行化(解決三種問題,但是效率極低相當(dāng)于鎖表)

?事務(wù)傳播行為

? ? ? ? ?一個(gè)事務(wù)方法調(diào)用另一個(gè)事務(wù)是會(huì)具有事務(wù)傳播行為

🔴事務(wù)狀態(tài)對(duì)象?

? ? ? ? TransactionStatus接口提供的是事務(wù)具體的運(yùn)行狀態(tài)

聲明式事務(wù)控制

? ? ? ? spring的聲明事務(wù)控制就是采用生命的方式處理事務(wù),這里說的聲明就是指在配置文件中聲明,用在spring配置文件中聲明處理事物的方式代替代碼式的處理事務(wù)。聲明式事務(wù)控制可以將業(yè)務(wù)邏輯和事務(wù)管理相分離開,這樣在不需要事務(wù)管理的時(shí)候,只要在設(shè)定文件上修改即可移除事務(wù)管理服務(wù),無(wú)需改變代碼方便維護(hù)。Spring聲明式事務(wù)控制的底層就是AOP

基于xml的聲明式事務(wù)控制

dao層:定義轉(zhuǎn)入轉(zhuǎn)出方法

?service層:實(shí)現(xiàn)轉(zhuǎn)入轉(zhuǎn)出的業(yè)務(wù)邏輯

?controller層:調(diào)用service層的方法進(jìn)行事務(wù)操作

????????如果xml文件中不進(jìn)行aop織入進(jìn)行事務(wù)增強(qiáng)的話,除數(shù)為零異常的拋出就會(huì)導(dǎo)致tom轉(zhuǎn)出500而lucy并沒有轉(zhuǎn)入500,接下來進(jìn)行事務(wù)控制配置

這樣的話就會(huì)在拋異常的同時(shí)兩人的賬戶余額都不會(huì)改變?

基于注解的聲明式事務(wù)控制

使用@Repository注解和@Service注解代替AccountDaoImpl和AccountServiceImpl的bean標(biāo)簽,使用@Transactional注解代替aop織入和事務(wù)增強(qiáng)設(shè)置

?

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

上一篇:【SSM面向CRUD編程專欄 6】springMVC攔截器、異常處理 jdbcTemplate

下一篇:【SSM面向CRUD編程專欄 8】一篇博客快速上手使用MyBatis進(jìn)行CRUD
?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【SSM面向CRUD编程专栏 7】springAop 事务控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。