註解理解
首先,<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/>的使用。
相關文章
- 深入理解 Java 註解 [元註解(一)]Java
- 對於 @Autowired註解和@service註解的理解
- 深入理解 Java 註解Java
- spring使用註解注入bean理解SpringBean
- 理解 PHP 8 中的 Attributes (註解)PHP
- 關於Java註解(annotation)的簡單理解Java
- Environment Switcher 原理解析(註解、Apt、反射、混淆)APT反射
- SAP Fiori @OData.publish 註解的工作原理解析
- SAP Fiori 註解 @ObjectModel.readOnly工作原理解析Object
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 註解專題(一)Java元註解,內建註解Java
- Java註解-後設資料、註解分類、內建註解和自定義註解Java
- Spring5:@Autowired註解、@Resource註解和@Service註解Spring
- 我對註冊中心的理解
- Java中的註解-自定義註解Java
- 【Spring註解】事務註解@TransactionalSpring
- Java註解詳解「註解專案實戰」Java
- Java註解解析-搭建自己的註解處理器(CLASS註解使用篇)Java
- 【String註解驅動開發】你瞭解@PostConstruct註解和@PreDestroy註解嗎?Struct
- Spring5原始碼深度分析(二)之理解@Conditional,@Import註解Spring原始碼Import
- 註解 & 反射反射
- @import註解Import
- java註解Java
- 註解 javaJava
- 註解和註釋區別
- Lombok 註解詳解Lombok
- Java註解詳解Java
- Java 註解詳解Java
- Java ”框架 = 註解 + 反射 + 設計模式“ 之 註解詳解Java框架反射設計模式
- Spring 註解程式設計之模式註解Spring程式設計模式
- 【Android】註解框架(二) 基礎知識(Java註解)& 執行時註解框架Android框架Java
- SwaggerAPI註解詳解,以及註解常用引數配置SwaggerAPI
- Spring5原始碼深度解析(一)之理解Configuration註解Spring原始碼
- Spring 各種註解備註Spring
- Laravel :register(註冊)和服務容器的理解Laravel
- Java中的註解-自定義註解處理器Java
- @FeignClient註解詳解client
- springmvc註解詳解SpringMVC