最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

啟用Spring事務(wù)管理@EnableTransactionManagement示例解析

 更新時(shí)間:2023年09月15日 11:09:15   作者:福  
這篇文章主要為大家介紹了啟用Spring事務(wù)管理@EnableTransactionManagement示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Spring事務(wù)管理

Spring事務(wù)管理可以通過(guò)@EnableTransactionManagement注解開(kāi)啟,通過(guò)對(duì)@EnableTransactionManagement的分析,就能揭開(kāi)Spring啟用事務(wù)的底層機(jī)制。

直接開(kāi)始源碼分析。

@EnableTransactionManagement注解作用在配置類(lèi)上,引入了TransactionManagementConfigurationSelector,這個(gè)先放一放,后面再分析。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {

我們先看一下他定義的方法:

boolean proxyTargetClass() default false;
AdviceMode mode() default AdviceMode.PROXY;
int order() default Ordered.LOWEST_PRECEDENCE;

定義了3個(gè)方法,我們逐個(gè)分析一下:

proxyTargetClass

boolean proxyTargetClass() default false;

Indicate whether subclass-based (CGLIB) proxies are to be created (true) as opposed to standard Java interface-based proxies (false). The default is false. Applicable only if mode() is set to AdviceMode.PROXY.
Note that setting this attribute to true will affect all Spring-managed beans requiring proxying, not just those marked with @Transactional. For example, other beans marked with Spring's @Async annotation will be upgraded to subclass proxying at the same time. This approach has no negative impact in practice unless one is explicitly expecting one type of proxy vs another, e.g. in tests.

決定采用CGLIB的方式(設(shè)置為T(mén)RUE)、還是JDK方式創(chuàng)建代理類(lèi)(設(shè)置為false),默認(rèn)值為false。僅在Mode設(shè)置為PROXY的情況下才有效。
需要注意的是設(shè)置為true后會(huì)影響所有的的被Spring管理的代理類(lèi)的創(chuàng)建方式,不止是@Transactional注解標(biāo)注的類(lèi)。比如,其他的被@Async標(biāo)注的類(lèi)也會(huì)被影響。

大概意思是說(shuō),在Mode設(shè)置為PROXY的情況下,這個(gè)參數(shù)決定代理類(lèi)的創(chuàng)建方式,設(shè)置為true則通過(guò)CGLIB方式創(chuàng)建代理對(duì)象,設(shè)置為false則通過(guò)JDK方式創(chuàng)建代理對(duì)象。默認(rèn)是通過(guò)JDK方式創(chuàng)建。

但是為什么設(shè)置為true后會(huì)影響到不止是@Transactional注解標(biāo)注的類(lèi),而是會(huì)影響到整個(gè)Spring管理的bean呢?待考證。

mode

AdviceMode mode() default AdviceMode.PROXY;
Indicate how transactional advice should be applied.
The default is AdviceMode.PROXY. Please note that proxy mode allows for interception of calls through the proxy only. Local calls within the same class cannot get intercepted that way; an Transactional annotation on such a method within a local call will be ignored since Spring's interceptor does not even kick in for such a runtime scenario. For a more advanced mode of interception, consider switching this to AdviceMode.ASPECTJ.

 事務(wù)advice(AOP概念)的實(shí)現(xiàn)方式,默認(rèn)值為PXOXY,注意PROXY模式只允許通過(guò)代理方式調(diào)用,本地調(diào)用不生效。事務(wù)注解方法如果通過(guò)本地調(diào)用的話(huà),事務(wù)處理不會(huì)生效,因?yàn)檫@種情況下Spring AOP的攔截機(jī)制不會(huì)生效。

JavaDoc說(shuō)的很明白了,也是我們?cè)谄渌恼吕锩嫣岬竭^(guò)的,如果在同一個(gè)類(lèi)中一個(gè)方法A調(diào)用被@Transactional標(biāo)注的另外一個(gè)方法B的話(huà),方法B的@Transactional不會(huì)生效,因?yàn)檫@種情況下的調(diào)用就屬于這里所說(shuō)的“本地調(diào)用”,沒(méi)有調(diào)用到代理類(lèi),AOP攔截機(jī)制不會(huì)生效,因此方法B不會(huì)被AOP增強(qiáng),因此事務(wù)不會(huì)生效。

Ordered

很熟悉的AOP增強(qiáng)概念,當(dāng)多個(gè)攔截器生效的情況下,決定其順序。

int order() default Ordered.LOWEST_PRECEDENCE;

好了,今天就到這里,由于Spring源碼本身比較復(fù)雜,一次分析太多、文章太大的話(huà),會(huì)比較亂,所以,改變一下思路,一篇文章只說(shuō)一個(gè)概念,控制文章的篇幅,增強(qiáng)可讀性。

以上就是啟用Spring事務(wù)管理@EnableTransactionManagement示例解析的詳細(xì)內(nèi)容,更多關(guān)于Spring事務(wù)管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解

    如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解

    這篇文章主詳細(xì)講解了如何基于目標(biāo)點(diǎn)的經(jīng)緯度計(jì)算日出日落時(shí)間,提供了在線(xiàn)API和Java庫(kù)兩種計(jì)算方法,并通過(guò)實(shí)際案例展示了其應(yīng)用,需要的朋友可以參考下
    2025-01-01
  • SPRING IOC注入方式過(guò)程解析

    SPRING IOC注入方式過(guò)程解析

    這篇文章主要介紹了SPRING IOC注入方式過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java進(jìn)階學(xué)習(xí)之如何開(kāi)啟遠(yuǎn)程調(diào)式

    Java進(jìn)階學(xué)習(xí)之如何開(kāi)啟遠(yuǎn)程調(diào)式

    Java開(kāi)發(fā)中的遠(yuǎn)程調(diào)試是一項(xiàng)至關(guān)重要的技能,特別是在處理生產(chǎn)環(huán)境的問(wèn)題或者協(xié)作開(kāi)發(fā)時(shí),這篇文章主要介紹了Java進(jìn)階學(xué)習(xí)之如何開(kāi)啟遠(yuǎn)程調(diào)式的相關(guān)資料,需要的朋友可以參考下
    2025-03-03
  • idea在某天打開(kāi)后一直在updating index的問(wèn)題及解決

    idea在某天打開(kāi)后一直在updating index的問(wèn)題及解決

    idea長(zhǎng)時(shí)間updatingindexs無(wú)法加載項(xiàng)目,原因是緩存文件異?;虮话踩浖謇?解決方法是點(diǎn)擊File>InvalidateCaches...>InvalidateandRestart重新加載,或等待idea自動(dòng)裝配完畢
    2026-05-05
  • Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法

    Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法

    本文主要介紹Struts2中參數(shù)傳遞方法,希望能給大家做一個(gè)參考。
    2016-06-06
  • 深入理解Java遺傳算法

    深入理解Java遺傳算法

    這篇文章主要為大家詳細(xì)介紹了Java遺傳算法,本文對(duì)基因的編碼采用二進(jìn)制規(guī)則,分享了對(duì)Java遺傳算法的理解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • java尋找迷宮路徑的簡(jiǎn)單實(shí)現(xiàn)示例

    java尋找迷宮路徑的簡(jiǎn)單實(shí)現(xiàn)示例

    這篇文章主要介紹了java尋找迷宮路徑的簡(jiǎn)單實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java動(dòng)態(tài)規(guī)劃之丑數(shù)問(wèn)題實(shí)例講解

    Java動(dòng)態(tài)規(guī)劃之丑數(shù)問(wèn)題實(shí)例講解

    這篇文章主要介紹了Java動(dòng)態(tài)規(guī)劃之丑數(shù)問(wèn)題實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • 公共POI導(dǎo)出Excel方法詳解

    公共POI導(dǎo)出Excel方法詳解

    這篇文章主要介紹了公共POI導(dǎo)出Excel方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明

    基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明

    這篇文章主要介紹了基于CyclicBarrier和CountDownLatch的使用區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

康定县| 金川县| 元谋县| 凤凰县| 汪清县| 北安市| 清新县| 安仁县| 红桥区| 吐鲁番市| 崇仁县| 鹿泉市| 贵溪市| 吴堡县| 施甸县| 甘肃省| 和田市| 宜良县| 铜陵市| 石台县| 高安市| 张家界市| 河曲县| 丰镇市| 陵川县| 平塘县| 阿鲁科尔沁旗| 祥云县| 怀宁县| 泾源县| 修水县| 维西| 正宁县| 马关县| 安新县| 毕节市| 宜春市| 三台县| 德清县| 凤翔县| 普兰店市|