[轉]Spring事務tx:annotation-driven/

? ? 在使用SpringMVC的時候,配置文件中我們經常看到 annotation-driven 這樣的注解,其含義就是支持注解,一般根據前綴 tx、mvc 等也能很直白的理解出來分別的作用。<tx:annotation-driven/> 就是支持事務注解的(@Transactional) 、<mvc:annotation-driven> 就是支持mvc注解的,說白了就是使Controller中可以使用MVC的各種注解。

? ??首先,<tx:annotation-driven/> 會有一個屬性來指定使用哪個事務管理器,如:<tx:annotation-driven transaction-manager="transactionManager" />。然后事務管理器 transactionManager 會引用 dataSource (如果我們使用JPA或hibernate,也需要指定一個 entityManagerFactory),dataSouce 肯定就是直接對數據庫的了。
這樣逐層引用下去,所以我們使用@Transactionl 注解可以控制事務就通俗易懂了。另外要提一下的就是Spring是使用AOP通過asm操作Java字節碼的方式來實現對方法的前后事務管理的。

? ? 說到這里,已經有了對 <tx:annotation-driven/> 的簡單理解,那我們是否就可以在程序中所有被spring管理的類上都可以使用@Transactional注解了呢,在Service上可以使用@Transactional 注解這個是肯定的了,那總有些人也想弄明白能否在Controller 使用?答案顯然是“不一定”的(與應用上下文配置有關),下面做下解釋:
在 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/>只會查找和它在相同的應用上下文件中定義的bean上面的@Transactional注解,如果你把它放在Dispatcher的應用上下文中,它只檢查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。

? ? 所以,可以確定的是我們是可以在Controller上使用事務注解的,但是我們不推薦這樣做(本人也從來沒有這樣做過),這里只是為了說明spring對<tx:annotation-driven/>的使用。

轉載于:https://www.cnblogs.com/atai/p/6868642.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455631.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455631.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455631.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自動化測試】整理各種測試開發工具!持續更新

收集和整理各種測試工具&#xff0c;自動化測試工具&#xff0c;自動化測試框架&#xff0c;覺得有幫助記得三連一下。歡迎提交各類測試工具到本博客。 通用測試框架 JUnit: 最著名的xUnit類的單元測試框架&#xff0c;但是不僅僅可以做單元測試。TestNG: 更強大的Java測試框架…

python連接sql數據庫_python連接sql server數據庫實現增刪改查

簡述 python連接微軟的sql server數據庫用的第三方模塊叫做pymssql&#xff08;document&#xff1a;http://www.pymssql.org/en/stable/index.html&#xff09;。在官方文檔可以看到&#xff0c;pymssql是基于_mssql模塊做的封裝&#xff0c;是為了遵守python的DBAPI規范接口.…

es5.0 安裝head插件

es5.0的安裝和之前的版本有些區別,我的電腦用plugin install 沒成功, 查了一下資料,說是可以用grunt進行安裝,啟動; 1,先安裝grunt: grunt是一個很方便的構建工具&#xff0c;可以進行打包壓縮、測試、執行等等的工作&#xff0c;5.0里的head插件就是通過grunt啟動的。 npm ins…

Django后臺項目之用戶管理功能開發流程

項目功能開發流程 1 先寫列表頁&#xff08;加載出來數據就行&#xff09; ob User_vip.objects.filter(is_del004001).order_by(-cts)2 寫添加功能 2.1 創建addOrDoadd視圖方法 2.2 添加訪問addOrDoadd的路由 2.3 在index.html頁面吧添加的按鈕的鏈接不全 <a style&…

套接字 資料查閱

(3)套接字(socket) 一個完整的網絡應用程序包括客戶端和服務器兩個部分。網間通信進程需要由兩個進程組成&#xff0c;并且只能用同一種協議。也就是說&#xff0c;不能在通信的一端使用TCP協議&#xff0c;而另一端則用UDP協議。一個完整的網絡通信需要一個五元組來標識…

linux mysql安裝_Linux下安裝mysql服務(超詳細)

Mysql數據庫的安裝對于開發者來說&#xff0c;是我們必然會面對的問題&#xff0c;它的安裝過程其實并不復雜&#xff0c;并且網絡上的安裝教程也非常多&#xff0c;但是對于新手來說&#xff0c;各種不同形式的安裝教程&#xff0c;又給新手們帶來了要選擇哪種方式進行安裝的難…

dash 和 bash 切換

#先看看是用的哪個 shellls -al /bin/sh #如果是dash&#xff0c;切換到bashsudo ln -fs /bin/bash /bin/sh轉載于:https://www.cnblogs.com/abolide/p/6874265.html

Django中使用ajax技術概述

ajax 1.什么是ajax ajax就是在不刷新整個頁面的情況下&#xff0c;去更新局部頁面的內容&#xff08;無刷新技術&#xff09; 2.ajax有什么優點 最大的一點是頁面無刷新&#xff0c;在頁面內與服務器通信&#xff0c;給用戶的體驗非常好。 使用異步方式與服務器通信&#x…

IE、FF腳本兼容性問題

1.window.event IE有這個對象&#xff1b;FF沒有&#xff0c;FF通過參數傳遞 2.獲取事件源 IE&#xff1a;srcElement FF&#xff1a;target 3.添加與去除事件 IE&#xff1a;element.attachEvent("onclick", function(){}) element.detachEvent("onclick"…

ARM MOV和 LDR指令關系

ARM是RISC結構&#xff0c;數據從內存到CPU之間的移動只能通過L/S指令來完成&#xff0c;也就是ldr/str指令。比如想把數據從內存中某處讀取到寄存器中&#xff0c;只能使用ldr比如&#xff1a;ldr r0, 0x12345678就是把0x12345678這個地址中的值存放到r0中。而mov不能干這個活…

day2 操作系統

一.為何要有操作系統 程序員無法把所有的硬件操作細節都了解到&#xff0c;管理這些硬件并且加以優化使用是非常繁瑣的工作&#xff0c;這個繁瑣的工作就是操作系統來干的&#xff0c;有了他&#xff0c;程序員就從這些繁瑣的工作中解脫了出來&#xff0c;只需要考慮自己的應用…

Django之model模型

模型 1.如何安裝pymysql 1.file->settings->Project Interpreter 2.點擊右邊的"" 3.搜索pymysql 4.點擊最下面的"install package" 5.安裝成功會提示"Package "pymysql" install successfully"2.如何在django中配置mysql 1.在…

python安裝不了jupyter_python學習筆記——Windowns下Python3之安裝jupyter

Windowns下Python3之安裝jupyter Jupyter notebook&#xff1a; 一個交互式筆記本&#xff0c;支持運行40多種編程語言。 利用它來寫Python&#xff0c;代碼和運行結果都可以保存下載&#xff0c;十分方便。本文主要以自身的安裝過程為例&#xff0c;結合遇到的問題&#xff0c…

Java文件讀寫操作

http://blog.csdn.net/jiangxinyu/article/details/7885518/ 比較齊全&#xff0c;有多種文件讀寫操作轉載于:https://www.cnblogs.com/maowuyu-xb/p/7238170.html

視頻編碼與封裝方式詳解

1. 編碼方式和封裝格式... 1 2. 視頻編碼標準兩大系統... 2 MPEG-1. 2 MPEG-2. 3 MPEG-3. 3 MPEG-4. 3 ITU-T. 4 WMV. 4 3. 常用視頻編碼方式有Xvid( 4 4. 常見存儲封裝格式... 6 5. 幾種常見的轉換格式設置... 7 6. 無損視頻編碼... 9 1. 編碼方式和封裝格式常見…

Binder

問&#xff1a;為什么Android要采用Binder作為IPC機制 答案來自百度知道&#xff1a; &#xff08;1&#xff09;從性能的角度數據拷貝次數&#xff1a;Binder數據拷貝只需要一次&#xff0c;而管道、消息隊列、Socket都需要2次&#xff0c;但共享內存方式一次內存拷貝都不需要…

matlab 三維核密度圖_Matlab精彩畫圖示例:三維網狀圖和三維曲面圖

接上篇&#xff1a;Matlab精彩畫圖示例&#xff1a;繪制圖上圖這篇介紹兩個繪制三維圖的命令&#xff1a;mesh - 繪制三維網狀圖surf - 繪制三維曲面圖matlab代碼如下&#xff1a;繪制三維圖的matlab代碼示例程序運行結果如下&#xff1a;mesh(X,Y,Z) draws a wireframe mesh w…

Django之templates模板

模板的使用 1.如何使用模板 在manage.py的同級文件夾中創建templates在setting.py的文件中把第58行DIRS: [ ],改成DIRS: [os.path.join(BASE_DIR,templates)], 知識點: os.path.join(BASE_DIR,templates) 拼接兩個字符串 BASE_DIR找到項目根目錄127.0.0.1:8000/myadmin/templ…

STL容器刪除元素的陷阱

今天看Scott Meyers大師的stl的用法&#xff0c;看到了我前段時間犯的一個錯誤&#xff0c;發現我寫的代碼和他提到錯誤代碼幾乎一模一樣&#xff0c;有關stl容器刪除元素的問題&#xff0c;錯誤的代碼如下&#xff1a;std::vector<struct> mFriendList;...std::vector&l…

JDBC1

1.jdbc的概述 是sun公司統一提供的一套接口規范,各個數據庫生產商提供實現 注冊驅動,獲得連接,獲得執行的SQL語句對象,釋放資源 package com.learn.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;import org.junit.Test;publ…