精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring 事務 @Transactional注解 面試及原理

開發 前端
我們都是把注解加到需要使用事務控制的方法上,也可以加到類上,加到類上是給類里的所有的方法都加了事務,不建議這樣做,這樣會增加不需要使用事務的接口的響應時長。

1. 你在項目中是如何使用事物的?

我們項目的框架都是使用的Spring,spring分為 編程式事務,在代碼中硬編碼。聲明式事務,在配置文件中配置(推薦使用)

聲明式事務又分為兩種:基于XML的聲明式事務基于注解的聲明式事務。我一般都是通過注解來進行的事務控制。也就是@Transactional

2. 先簡單介紹一下@Transactional注解嗎?項目中如何使用的?有哪些注意點嗎?

我們都是把注解加到需要使用事務控制的方法上,也可以加到類上,加到類上是給類里的所有的方法都加了事務,不建議這樣做,這樣會增加不需要使用事務的接口的響應時長。

@Transactional注解只能用在public 方法上,如果用在protected或者private的方法上,不會報錯,但是該注解不會生效。

@Transactional注解只能回滾非檢查型異常,具體為RuntimeException及其子類。

3. Spring 事務中的隔離級別有哪幾種?

TransactionDefinition 接口中定義了五個表示隔離級別的常量:

TransactionDefinition.ISOLATION_DEFAULT: 使用后端數據庫默認的隔離級別,

Mysql 默認采用的 REPEATABLE_READ隔離級別 Oracle 默認采用的 READ_COMMITTED隔離級別。

TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔離級別,允許讀取未提交的數據變更,可能會導致臟讀、幻讀或不可重復讀。

TransactionDefinition.ISOLATION_READ_COMMITTED: 允許讀取并發事務已經提交的數據,可以阻止臟讀,但是幻讀或不可重復讀仍有可能發生。

TransactionDefinition.ISOLATION_REPEATABLE_READ: 對同一字段的多次讀取結果都是一致的,除非數據是被本身事務自己所修改,可以阻止臟讀和不可重復讀,但幻讀仍有可能發生。

TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔離級別,完全服從ACID的隔離級別。所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止臟讀、不可重復讀以及幻讀。但是這將嚴重影響程序的性能。通常情況下也不會用到該級別。

4. Spring 事務中哪幾種事務傳播行為?

支持當前事務的情況:

TransactionDefinition.PROPAGATION_REQUIRED: 如果當前存在事務,則加入該事務;

如果當前沒有事務,則創建一個新的事務。

TransactionDefinition.PROPAGATION_SUPPORTS: 如果當前存在事務,則加入該事務;

如果當前沒有事務,則以非事務的方式繼續運行。

TransactionDefinition.PROPAGATION_MANDATORY: 如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。(mandatory:強制性)不支持當前事務的情況:

不支持當前事務的情況:

TransactionDefinition.PROPAGATION_REQUIRES_NEW: 創建一個新的事務,

如果當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事務方式運行,

如果當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_NEVER: 以非事務方式運行,

如果當前存在事務,則拋出異常。

其他情況:

TransactionDefinition.PROPAGATION_NESTED: 如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價于TransactionDefinition.PROPAGATION_REQUIRED。

5. @Transactional注解只能用在public 方法上,這是為什么?

Spring事務的實現都是依靠AOP,本質上也是依靠代理來實現。事務在spring中的實現其實就是生成bean對象的代理對象。

在bean進行創建出實例時, 如果是有事務注解的方法,就會被進行增強,最終形成代理類。在spring中,有兩種動態代理的方式,一種是jdk,它是將原始對象放入代理對象內部,通過調用內含的原始對象來實現原始的業務邏輯,而另一種是cglib,它是通過生成原始對象的子類,子類復寫父類的方法,從而實現對父類的增強。

jdk中,如果是private的方法,顯然是無法訪問的,而在cglib中,也是同樣。所以總結來說private方法不能被繼承,final方法不能被重寫,static方法和繼承不相干,所以它們3個的事務不起作用。

Spring選擇讓protected方法和package方法不支持事務,所以只有public方法支持事務

6. 一個類中沒加事務的方法調用加事務的方法,為什么事務失效?怎么解決Spring事務失效的問題?

原因:

Spring事務管理用的是AOP,AOP底層用的是動態代理。所以spring 在掃描bean的時候會掃描方法上是否包含@Transactional注解,如果包含,spring會為這個bean動態地生成一個子類(即代理類,proxy),當這個有注解的方法被調用的時候,實際上是由代理類來調用的,代理類在調用之前就會啟動transaction。然而,如果這個有注解的方法是被同一個類中的其他方法調用的,那么該方法的調用并沒有通過代理類,而是直接通過原來的那個bean,所以就不會啟動transaction。

解決方式:

  • 把方法B抽離到另外一個XXService中去,并且在這個Service中注入XXService,使用XXService調用方法B;
  • 通過在方法內部獲得當前類代理對象的方式,通過代理對象調用方法B

上面說了:動態代理最終都是要調用原始對象的,而原始對象在去調用方法時,是不會再觸發代理了!所以我們就使用代理對象來調用,就會觸發事務;

綜上解決方案,那怎么獲取代理對象呢? 這里提供兩種方式:

  • 使用 ApplicationContext 上下文對象獲取該對象;
  • 使用 AopContext.currentProxy() 獲取代理對象,但是需要配置exposeProxy=true

7. 同一個類中標有@Transactional 的方法A,調用另一個標有@Transactional的 方法B會開啟幾個事務?

一個事務

Spring事務管理用的是AOP,AOP底層用的是動態代理。所以spring 在掃描bean的時候會掃描方法上是否包含@Transactional注解,如果包含,spring會為這個bean動態地生成一個子類(即代理類,proxy),代理類是繼承原來那個bean的。

此時,當這個有注解的方法被調用的時候,實際上是由代理類來調用的,代理類在調用之前就會啟動transaction。如果是被同一個類中的其他方法調用的,那么該方法的調用并沒有通過代理類,而是直接通過原來的那個bean,所以就不會啟動transaction,我們說只有一個事務。

8. 那么如何才能讓上面兩個方法開啟兩個事務呢?

1.把方法B抽離到另外一個XXService中去,在這個Service中注入XXService,使用XXService調用方法B;

2.通過在方法內部獲得當前類代理對象的方式,通過代理對象調用方法B

上面說了:動態代理最終都是要調用原始對象的,而原始對象在去調用方法時,是不會再觸發代理了!所以我們就使用代理對象來調用,就會觸發事務;

綜上解決方案,那怎么獲取代理對象呢? 這里提供兩種方式:

1.使用 ApplicationContext 上下文對象獲取該對象;

2.使用 AopContext.currentProxy() 獲取代理對象,但是需要配置exposeProxy=true

TestService testService = (TestService)AopContext.currentProxy();

testService.B();

同時還需要在B方法將傳播行為配置為 @Transactional(propagation = Propagation.REQUIRES_NEW)

9. @Transactional實現原理

注解介紹

@Transactional是spring中聲明式事務管理的注解配置方式。@Transactional注解可以幫助我們把事務開啟、提交或者回滾的操作,通過aop的方式進行管理。

通過@Transactional注解就能讓spring為我們管理事務,免去了重復的事務管理邏輯,減少對業務代碼的侵入,使我們開發人員能夠專注于業務層面開發。

我們知道實現@Transactional原理是基于spring aop,aop又是動態代理模式的實現,下面我們就詳細分析一下實現原理

實現原理

猜想

  • 首先,對于spring中aop實現原理有了解的話,應該知道想要對一個方法進行代理的話,肯定需要定義切點。在@Transactional的實現中,同樣如此,spring為我們定義了以 @Transactional 注解為植入點的切點,這樣才能知道@Transactional注解標注的方法需要被代理。
  • 有了切面定義之后,在spring的bean的初始化過程中,就需要對實例化的bean進行代理,并且生成代理對象。
  • 生成代理對象的代理邏輯中,進行方法調用時,需要先獲取切面邏輯,@Transactional注解的切面邏輯類似于@Around,在spring中是實現一種類似代理邏輯。

源碼分析

  • 在配置好注解驅動方式的事務管理之后,spring會在ioc容器創建一個BeanFactoryTransactionAttributeSourceAdvisor實例,這個實例可以看作是一個切點,在判斷一個bean在初始化過程中是否需要創建代理對象,都需要驗證一次BeanFactoryTransactionAttributeSourceAdvisor是否是適用這個bean的切點。如果是,就需要創建代理對象,并且把BeanFactoryTransactionAttributeSourceAdvisor實例注入到代理對象中。
  • 分析代理的對象發現,最終的代理對象的代理方法是DynamicAdvisedInterceptor#intercept,分析這個方法后發現他最終調用的是TransactionInterceptor#invoke方法,并且把CglibMethodInvocation注入到invoke方法中,從上面可以看到CglibMethodInvocation是包裝了目標對象的方法調用的所有必須信息,因此,在TransactionInterceptor#invoke里面也是可以調用目標方法的,并且還可以實現類似@Around的邏輯,在目標方法調用前后繼續注入一些其他邏輯,比如事務管理邏輯。
  • 當我們調進去TransactionInterceptor#invoke方法發現其中的核心方法是invokeWithinTransaction。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-06-26 14:59:13

SpringTransaction執行

2023-11-02 07:52:30

Java工具

2023-09-27 16:22:51

SpringMySQL原子性

2021-04-14 15:17:08

Transaction代碼語言

2023-09-28 09:07:54

注解失效場景

2025-01-16 08:45:48

2022-09-20 22:27:08

事務失效public 修飾

2022-09-14 19:50:22

事務場景流程

2023-04-02 13:57:04

Java自定義事務管理器

2025-10-09 01:11:00

Spring數據庫事務

2025-09-30 08:27:18

Spring數據庫編程式

2022-08-08 17:38:45

Spring策略事務

2025-01-06 09:26:49

2022-08-09 09:34:32

Spring開發

2025-10-30 07:45:06

2023-08-31 08:12:23

應用場景業務異常HTTP

2021-03-10 10:55:51

SpringJava代碼

2020-11-17 08:28:55

數據庫

2021-11-29 06:57:50

并行Stream Spring

2020-10-19 11:05:17

SpringTransaction事務
點贊
收藏

51CTO技術棧公眾號

日本欧美一区二区在线观看| 国产成人一二片| 国产精品色在线| 亚洲精品免费av| 国产香蕉在线视频| 国产精品欧美日韩一区| 91精品国产一区二区三区香蕉| 精品人妻大屁股白浆无码| 日本福利午夜视频在线| 久久成人综合网| 久久久在线视频| www久久久久久久| 精品福利一区| 欧美日韩激情一区二区| 激情小视频网站| av在线播放网站| 粉嫩高潮美女一区二区三区| 欧洲精品在线视频| 亚洲国产精品久| 精品一区二区三区在线| 亚洲精品一区二区三区在线观看 | 18视频在线观看| www成人在线观看| 7777精品久久久大香线蕉小说| 久久久久女人精品毛片九一| 国色天香一区二区| 在线播放亚洲激情| 菠萝菠萝蜜网站| **爰片久久毛片| 91精品国产麻豆国产自产在线 | 亚洲国产精品无码久久久| 欧美a级一区| 日韩在线视频中文字幕| 国产毛片久久久久久久| 欧美精品国产白浆久久久久| 日韩欧美一级二级三级 | 波多野结衣一区二区三区| 国产日韩专区在线| 亚洲精品一区二区二区| 久久都是精品| 欧亚精品中文字幕| 在线观看日本视频| 亚洲欧美成人综合| 91av中文字幕| 男人的天堂一区二区| 亚洲国内自拍| 久久久久久久香蕉网| 久久午夜鲁丝片午夜精品| 中文字幕人成人乱码| 久久亚洲国产精品| 欧美手机在线观看| 天天影视欧美综合在线观看| xvideos亚洲人网站| 国产破处视频在线观看| 日韩欧美字幕| 最近2019免费中文字幕视频三| 影音先锋制服丝袜| 日韩黄色大片网站| 日韩亚洲欧美中文在线| 亚洲天堂网av在线| 欧美日韩国产高清| 欧美激情视频在线观看| 久久精品视频9| 国产亚洲激情| 日本精品在线视频| 亚洲天堂视频在线播放| 捆绑变态av一区二区三区| 国产主播喷水一区二区| 国产人妖一区二区| 成人午夜激情影院| 欧美精品久久久| 成人午夜影视| 日韩一区日韩二区| 久久手机在线视频| 亚洲欧美se| 欧美视频一区二区在线观看| 国内av一区二区| 亚洲综合色婷婷在线观看| 亚洲国产日韩精品在线| 美国黄色一级毛片| 欧美国产偷国产精品三区| 欧美成人网在线| wwwxxx亚洲| 男女激情视频一区| 99免费在线视频观看| 日韩二区三区| 日韩美女啊v在线免费观看| 欧美中文字幕在线观看视频| 成人小电影网站| 69成人精品免费视频| 99re久久精品国产| 日韩午夜电影网| 久久久久久久久久av| 无码人妻丰满熟妇精品区| 国产一区二区调教| 欧美日韩国产三区| 性国产高清在线观看| 日韩欧美精品网站| 性鲍视频在线观看| 禁断一区二区三区在线| 色综合久久久888| 18国产免费视频| 成人涩涩免费视频| 曰韩不卡视频| 校园春色亚洲色图| 亚洲国产精品电影| 欧洲美女女同性互添| 先锋影音国产一区| 91精品婷婷国产综合久久蝌蚪| 九色视频成人自拍| 亚洲国产精品嫩草影院| 亚洲精品性视频| 日本一道高清一区二区三区| 久久综合久久美利坚合众国| 国产亚洲欧美在线精品| 国产**成人网毛片九色 | 精品蜜桃传媒| 黄色免费在线观看| 在线免费观看日韩欧美| 中文字幕一区二区三区乱码不卡| 国产精品99久久| 日本一区二区不卡| 天天色综合久久| 亚洲精品成人精品456| 在线免费观看视频黄| 亚洲宅男一区| 午夜精品久久久久久久99热| 国产精品久久久久精| 国产日产欧美精品一区二区三区| 一二三四视频社区在线| 免费精品一区二区三区在线观看| 中文字幕欧美日韩在线| 在线永久看片免费的视频| 91视视频在线观看入口直接观看www| av动漫在线免费观看| 国产精品亚洲综合在线观看| 日韩在线观看免费高清| 中文字幕网址在线| 中文字幕av一区二区三区高| 国产精品人人妻人人爽人人牛| 日韩成人av在线资源| 91地址最新发布| 亚洲av成人无码久久精品老人| 亚洲一区二区在线免费看| 蜜桃视频无码区在线观看| 欧美国产三区| 91九色在线观看| 欧美14一18处毛片| 欧美mv日韩mv国产网站| 久久免费播放视频| av影院午夜一区| 一女被多男玩喷潮视频| 亚洲第一二三区| 日本在线观看天堂男亚洲| 国内在线精品| 欧美精品一卡两卡| 私库av在线播放| 成人免费黄色在线| 日本在线xxx| 亚洲品质自拍| 国产精品视频地址| 影音先锋中文在线视频| 精品久久免费看| 一级片中文字幕| 国产欧美日韩不卡免费| 中文字幕22页| 激情综合电影网| 欧美日韩在线精品| 日韩毛片网站| 欧美丰满片xxx777| 青青久草在线| 欧美日韩国产综合视频在线观看 | 亚洲色诱最新| 日本亚洲欧洲精品| 91麻豆精品| 欧美精品成人在线| 国产黄在线观看免费观看不卡| 欧美三级欧美一级| 久久免费视频99| 国产亚洲综合在线| www.五月天色| 亚洲激精日韩激精欧美精品| 欧美xxxx黑人又粗又长密月 | 日韩精品免费专区| 大桥未久一区二区三区| 久久夜色电影| 国产精品视频免费观看www| 秋霞在线视频| 亚洲最大中文字幕| 亚洲精品久久久蜜桃动漫| 日韩欧美在线播放| 多男操一女视频| 99麻豆久久久国产精品免费 | 最近2019中文字幕在线高清| 亚洲爱爱综合网| 91激情五月电影| 精国产品一区二区三区a片| 久久久噜噜噜久噜久久综合| 深夜做爰性大片蜜桃| 久久久久在线| 日韩精品一区二区三区四 | 日韩精品在线中文字幕| 精品国产乱码久久久| 国产高清一区视频| 国产精品久久久久久吹潮| 欧美激情18p| freemovies性欧美| 亚洲第一av在线| a天堂在线视频| 欧美综合一区二区三区| 国产无遮挡免费视频| 中文字幕日韩欧美一区二区三区| 97人妻天天摸天天爽天天| 国产一区二区精品在线观看| 精品视频一区二区在线| 国内精品久久久久国产盗摄免费观看完整版| 欧美一区二区三区精美影视| jizz国产精品| 91久久久久久久久久久| 国产三级一区| 欧美最顶级的aⅴ艳星| 欧美xxxx性xxxxx高清| 日韩视频在线一区| 成在在线免费视频| 亚洲欧美激情在线视频| 天天色天天操天天射| 欧美不卡在线视频| 国产成人精品a视频| 欧美日韩成人一区| 一二三区在线播放| 欧美视频中文字幕| 黄色污污视频软件| 日本乱人伦aⅴ精品| 亚洲 欧美 成人| 精品成人乱色一区二区| 国产第一页第二页| 亚洲一区二三区| 久久精品免费av| 亚洲成av人片观看| 日本亚洲欧美在线| 午夜亚洲国产au精品一区二区| www.av视频| 亚洲精品国产视频| 久草免费在线观看视频| 一区二区三区精品在线观看| 欧美精品乱码视频一二专区| 亚洲激情第一区| 九九热视频精品| 亚洲无人区一区| 五月婷婷亚洲综合| 一本色道a无线码一区v| 欧美亚洲另类小说| 欧美亚洲一区三区| 国产美女明星三级做爰| 欧美一级在线免费| 免费看黄网站在线观看| 亚洲精品国精品久久99热一| 日本私人网站在线观看| 亚洲新声在线观看| 日本高清中文字幕在线| 俺去了亚洲欧美日韩| 污污的视频在线观看| 91国内在线视频| 日韩精品影片| 国产一区香蕉久久| 亚洲高清在线一区| 精品视频高清无人区区二区三区| 亚洲丝袜美腿一区| 亚洲二区三区四区| 欧美成人有码| 日韩av三级在线| 美国毛片一区二区三区| 欧美体内she精高潮| 波多野结衣中文字幕一区二区三区| 播金莲一级淫片aaaaaaa| 国产精品三级av在线播放| 日韩欧美中文字幕视频| 精品国产乱码久久久久久天美 | 欧美成人手机视频| 欧美日韩免费在线观看| 在线不卡免费视频| 精品少妇一区二区三区在线视频 | 国产午夜亚洲精品羞羞网站| 老司机精品免费视频| 亚洲一区二区免费视频| 国产精品va无码一区二区三区| 欧美日韩精品专区| 欧美一区二区三区成人片在线| 亚洲视频自拍偷拍| 色网在线观看| 国产精品久久久久不卡| 日韩三级网址| 手机看片福利永久国产日韩| 午夜电影亚洲| 美女喷白浆视频| 成人h动漫精品一区二| 亚洲精品电影院| 欧美视频中文在线看| 国产av一区二区三区| 一区二区福利视频| 国产精品高颜值在线观看| 成人h猎奇视频网站| 九九在线精品| 欧美亚洲色图视频| 精品一区二区成人精品| aa一级黄色片| 亚洲国产婷婷综合在线精品| 一级淫片免费看| 亚洲免费电影在线观看| 国产三线在线| 92看片淫黄大片欧美看国产片| 欧美欧美黄在线二区| 日韩精品视频在线观看视频| 极品少妇一区二区| 午夜在线观看一区| 欧美午夜美女看片| 国产91久久久| 日韩有码片在线观看| 精品无人乱码一区二区三区| 国产综合第一页| 中文一区一区三区免费在线观看| 国产一区二区在线免费播放| 久久久综合网站| 国产成人在线免费观看视频| 日韩精品一区二区三区四区视频| 日本在线视频网| 国产欧美一区二区三区在线| 国产亚洲精品美女久久久久久久久久| 日韩国产成人无码av毛片| 国产麻豆91精品| www.xxxx日本| 日韩视频免费直播| a级在线观看| 91精品国产综合久久香蕉| 青青草成人影院| 久草福利视频在线| 欧美激情一区二区三区蜜桃视频| 中文字幕一区在线播放| 日韩国产激情在线| 亚洲女同av| 欧美另类网站| 久久久成人网| 婷婷色一区二区三区| 在线观看视频一区二区| a天堂中文在线| 国产精品网址在线| 小说区亚洲自拍另类图片专区| 成人性生交免费看| 综合色中文字幕| 国产suv一区二区| 欧美另类极品videosbestfree| 亚洲精品国产九九九| www.av蜜桃| 久久美女艺术照精彩视频福利播放| 天堂网一区二区| 精品国产欧美一区二区五十路| 在线免费观看亚洲| 300部国产真实乱| 成人网在线免费视频| 久草国产精品视频| 国产一区二区三区在线看| 久久99国产精品二区高清软件| 小说区视频区图片区| 国产·精品毛片| 黄色一级片免费在线观看| 中文字幕亚洲欧美日韩在线不卡| 外国成人毛片| 欧美精品自拍视频| 久久精品亚洲精品国产欧美| 中文字幕一二区| 九色精品美女在线| 网友自拍区视频精品| 不卡的av中文字幕| 一区二区三区精品视频在线| 亚洲色图另类小说| 国产精品一区二区电影| 欧美另类亚洲| 亚洲精品视频久久久| 91.麻豆视频| 91超碰在线免费| 亚洲a∨一区二区三区| 国产福利一区在线| 日韩美一区二区| 久久综合免费视频| 天堂网av成人| 爱情岛论坛亚洲自拍| 一本色道a无线码一区v| 成a人片在线观看| 欧美另类高清视频在线| 国产精品一二二区| 精品无码一区二区三区的天堂| 美女黄色丝袜一区| 精品久久国产| 亚州av综合色区无码一区| 欧美三级乱人伦电影| 亚洲国产福利| 久久久久久久久久伊人| 欧美激情在线免费观看| 午夜视频福利在线观看| 91中文在线视频|