1. 程式人生 > >@Transactional事務不起作用原因補充

@Transactional事務不起作用原因補充

今天,使用@Transactional,但是事務卻不起作用,配置確定配置成功,在網上查詢資料,在每個每個原因都試了之後仍然無效,最終發現,原來他們都漏了一個原因,而我正好是這個原因。

因為spring容器和spring-mvc是父子容器,spring容器會先載入,如果此時掃描了Controller,但未掃描到Service。
spring事務配置檔案還有上下文都是通過org.springframework.web.context.ContextLoaderListener載入的,而spring MVC的action是通過org.springframework.web.servlet.DispatcherServlet載入的

 。
web是先啟動ContextLoaderListener後啟動DispatcherServlet 在ContextLoaderListener載入的時候action並沒在容器中,所以現在使用AOP新增事務或者掃描註解都是無用的。

結論:讓spring掃描註冊Service實現類,讓MVC掃描註冊Controller,此時spring父容器已經註冊Service為Bean,此時事務可以得到正常配置。