欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

啟用Spring事務管理@EnableTransactionManagement示例解析

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

Spring事務管理

Spring事務管理可以通過@EnableTransactionManagement注解開啟,通過對@EnableTransactionManagement的分析,就能揭開Spring啟用事務的底層機制。

直接開始源碼分析。

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

@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個方法,我們逐個分析一下:

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的方式(設置為TRUE)、還是JDK方式創(chuàng)建代理類(設置為false),默認值為false。僅在Mode設置為PROXY的情況下才有效。
需要注意的是設置為true后會影響所有的的被Spring管理的代理類的創(chuàng)建方式,不止是@Transactional注解標注的類。比如,其他的被@Async標注的類也會被影響。

大概意思是說,在Mode設置為PROXY的情況下,這個參數決定代理類的創(chuàng)建方式,設置為true則通過CGLIB方式創(chuàng)建代理對象,設置為false則通過JDK方式創(chuàng)建代理對象。默認是通過JDK方式創(chuàng)建。

但是為什么設置為true后會影響到不止是@Transactional注解標注的類,而是會影響到整個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.

 事務advice(AOP概念)的實現方式,默認值為PXOXY,注意PROXY模式只允許通過代理方式調用,本地調用不生效。事務注解方法如果通過本地調用的話,事務處理不會生效,因為這種情況下Spring AOP的攔截機制不會生效。

JavaDoc說的很明白了,也是我們在其他文章里面提到過的,如果在同一個類中一個方法A調用被@Transactional標注的另外一個方法B的話,方法B的@Transactional不會生效,因為這種情況下的調用就屬于這里所說的“本地調用”,沒有調用到代理類,AOP攔截機制不會生效,因此方法B不會被AOP增強,因此事務不會生效。

Ordered

很熟悉的AOP增強概念,當多個攔截器生效的情況下,決定其順序。

int order() default Ordered.LOWEST_PRECEDENCE;

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

以上就是啟用Spring事務管理@EnableTransactionManagement示例解析的詳細內容,更多關于Spring事務管理的資料請關注腳本之家其它相關文章!

相關文章

  • Spring boot中使用ElasticSearch的方法詳解

    Spring boot中使用ElasticSearch的方法詳解

    這篇文章主要給大家介紹了關于Spring boot中使用ElasticSearch的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Spring?Boot超大文件上傳實現秒傳功能

    Spring?Boot超大文件上傳實現秒傳功能

    這篇文章主要介紹了Spring?Boot超大文件上傳實現秒傳功能,在實現分片上傳的過程,需要前端和后端配合,比如前后端的上傳塊號的文件大小,前后端必須得要一致,否則上傳就會有問題,需要的朋友可以參考下
    2022-12-12
  • 非常適合新手學生的Java線程池超詳細分析

    非常適合新手學生的Java線程池超詳細分析

    作者是一個來自河源的大三在校生,以下筆記都是作者自學之路的一些淺薄經驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門
    2022-03-03
  • SpringBoot中的Thymeleaf模板

    SpringBoot中的Thymeleaf模板

    Thymeleaf 的出現是為了取代 JSP,雖然 JSP 存在了很長時間,并在 Java Web 開發(fā)中無處不在,但是它也存在一些缺陷。在這篇文中給大家介紹了這些缺陷所存在問題,對spring boot thymeleaf 模板相關知識感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • mybatis中mapper-locations的作用

    mybatis中mapper-locations的作用

    這篇文章主要介紹了mybatis中mapper-locations的具體作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • JPA?使用criteria簡單查詢工具類方式

    JPA?使用criteria簡單查詢工具類方式

    這篇文章主要介紹了JPA?使用criteria簡單查詢工具類方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring Boot 整合mybatis 與 swagger2

    Spring Boot 整合mybatis 與 swagger2

    之前使用springMVC+spring+mybatis,總是被一些繁瑣的xml配置,還經常出錯,下面把以前的一些ssm項目改成了spring boot + mybatis,相對于來說優(yōu)點太明顯了,具體內容詳情大家通過本文學習吧
    2017-08-08
  • 淺談Spring中單例Bean是線程安全的嗎

    淺談Spring中單例Bean是線程安全的嗎

    這篇文章主要介紹了淺談Spring中單例Bean是線程安全的嗎?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot+Response如何統(tǒng)一返回result結果集

    SpringBoot+Response如何統(tǒng)一返回result結果集

    這篇文章主要介紹了SpringBoot+Response如何統(tǒng)一返回result結果集,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Mybatis-Plus中updateById方法不能更新空值問題解決

    Mybatis-Plus中updateById方法不能更新空值問題解決

    本文主要介紹了Mybatis-Plus中updateById方法不能更新空值問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論