Spring事務(wù)annotation原理詳解
這篇文章主要介紹了Spring事務(wù)annotation原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在使用Spring的時(shí)候,配置文件中我們經(jīng)??吹?annotation-driven 這樣的注解,其含義就是支持注解,一般根據(jù)前綴 tx、mvc 等也能很直白的理解出來分別的作用。
<tx:annotation-driven/> 就是支持事務(wù)注解的(@Transactional) 。
<mvc:annotation-driven> 就是支持mvc注解(Controller中可以使用MVC的各種注解)。
<tx:annotation-driven/> 會(huì)有一個(gè)屬性來指定使用哪個(gè)事務(wù)管理器,如:
<tx:annotation-driven transaction-manager="txManager" />//txManager就是指定的事務(wù)管理器
這樣逐層引用下去,所以我們使用@Transactionl 注解可以控制事務(wù)就通俗易懂了。
另外要提一下的就是 Spring 是使用 aop 通過 asm 操作Java字節(jié)碼的方式來實(shí)現(xiàn)對(duì)方法的前后事務(wù)管理的。
那我們是否就可以在程序中所有被spring管理的類上都可以使用@Transactional注解了呢,在Service上可以使用@Transactional 注解這個(gè)是肯定的了,那總有些人也想弄明白能否在Controller 使用?答案顯然是“不一定”的(與時(shí)間配置有關(guān)),下面做下解釋:
在 spring-framework-reference.pdf 文檔上有這樣一段話:
<tx:annotation-driven/> only looks for @Transactional on beans in the same application context
it is defined in. This means that, if you put <tx:annotation-driven/> in a WebApplicationContext
for a DispatcherServlet, it only checks for @Transactional beans in your controllers,
and not your services.
翻譯:<tx:annoation-driven/>只會(huì)查找和它在相同的應(yīng)用上下文件中定義的bean上面的@Transactional注解,如果你把它放在Dispatcher的應(yīng)用上下文中,它只檢查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。
所以,可以確定的是我們是可以在Controller上使用事務(wù)注解的,但是我們不推薦這樣做,這里只是為了說明spring對(duì)<tx:annotation-driven/>的使用。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring實(shí)戰(zhàn)之使用注解實(shí)現(xiàn)聲明式事務(wù)操作示例
- Spring事務(wù)傳播行為問題解決
- Spring事務(wù)管理原理及方法詳解
- Spring如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù)
- SpringBoot內(nèi)部調(diào)用事務(wù)不起作用問題的解決方案
- SpringBoot+Dubbo+Seata分布式事務(wù)實(shí)戰(zhàn)詳解
- Spring編程式和聲明式事務(wù)實(shí)例講解小結(jié)
- springboot中事務(wù)管理@Transactional的注意事項(xiàng)與使用場(chǎng)景
- 詳解Spring Boot微服務(wù)如何集成fescar解決分布式事務(wù)問題
相關(guān)文章
Java 數(shù)組轉(zhuǎn)List的四種方式小結(jié)
本文主要介紹了四種將Java數(shù)組轉(zhuǎn)換為L(zhǎng)ist的方法,包括使用Arrays.asList、ArrayList構(gòu)造器、Collections.addAll以及JDK8的Stream,具有一定的參考價(jià)值,感興趣的可以了解一下2024-10-10JPA之EntityManager踩坑及解決:更改PersistenceContext
這篇文章主要介紹了JPA之EntityManager踩坑及解決:更改PersistenceContext方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02深入講解spring boot中servlet的啟動(dòng)過程與原理
這篇文章主要給大家介紹了關(guān)于spring boot中servlet啟動(dòng)過程與原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07java 生成有序賬號(hào)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava 生成有序賬號(hào)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10SpringBoot使用redis生成訂單號(hào)的實(shí)現(xiàn)示例
在電商系統(tǒng)中,生成唯一訂單號(hào)是常見需求,本文介紹如何利用SpringBoot和Redis實(shí)現(xiàn)訂單號(hào)的生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09springboot項(xiàng)目配置logback日志系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了springboot項(xiàng)目配置logback日志系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Spring?Security短信驗(yàn)證碼實(shí)現(xiàn)詳解
本文主要介紹了Spring?Security短信驗(yàn)證碼的實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11Spring集成Web環(huán)境與SpringMVC組件的擴(kuò)展使用詳解
這篇文章主要介紹了Spring集成Web環(huán)境與SpringMVC組件,它是一個(gè)MVC架構(gòu),用來簡(jiǎn)化基于MVC架構(gòu)的Web應(yīng)用開發(fā)。SpringMVC最重要的就是五大組件2022-08-08