1. 程式人生 > >spring管理事務失效的原因和No mapping found for HTTP request with URI []DispatcherServlet with name 'sprinmvc錯誤

spring管理事務失效的原因和No mapping found for HTTP request with URI []DispatcherServlet with name 'sprinmvc錯誤

練習了一個spring的事務配置問題,在搭建spring和springmvc時,考驗了一下事務,結果發現事務竟然失效了。這裡做一下總結。

一般我們在Spring的配置檔案application.xml中對Service層程式碼配置事務管理,可以對Service的方法進行AOP增強或事務處理如事務回滾,但是遇到一個問題,在Controller類中呼叫Service層方法,配置的事務管理會失效,查詢相關資料發現原因。其實Spring和SpringMVC倆個容器為父子關係,Spring為父容器,而SpringMVC為子容器。也就是說application.xml中應該負責掃描除@Controller的註解如@Service,而SpringMVC的配置檔案應該只負責掃描@Controller,否則會產生重複掃描導致Spring容器中配置的事務失效。


因此正確的配置方式應該為:

springmvc的掃描包路徑:

<!-- 開啟掃描包 -->
 <context:component-scan base-package="com.xiaoma.controller" />
而spring的掃描包路徑:

<!-- 開啟掃描包 -->
<context:component-scan base-package="com.xiaoma.service" />
<context:component-scan base-package="com.xiaoma.dao" />
之後無論是宣告式事務:還是註解式事務都沒有問題了!

特別注意:

掃描包如果是分開了寫的話必須具體到某個包下不能寫成如下的樣子,不然訪問結果就是404.

<!-- 開啟掃描包 -->
<context:component-scan base-package="com.xiaoma.controller.*" />
而異常就是:

No mapping found for HTTP request with URI [/springFramework1/User/user] in DispatcherServlet with name 'springmvc'