終於找到全annotation配置springMVC的方法了(事務不失效)

若是帶上事務,那麼用annotation方式的事務註解和bean配置,事務會失效,要將service bean配置到xml文件中才行 


這個問題是因爲問答上有解決方案 
引用 

這個問題很經典了 
在主容器中(applicationContext.xml),掃描註解 servicespring

1 <context:component-scan base-package="com"> 
2   <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> 
3 </context:component-scan>

 

 



而在springMVC配置文件中掃描 controllerexpress

1 <context:component-scan base-package="com"> 
2   <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
4 </context:component-scan> 

 



由於spring的context是父子容器,因此會產生衝突,由ServletContextListener產生的是父容器,springMVC產生的是子容器,子容器Controller進行掃描裝配時裝配了@Service註解的實例,而該實例理應由父容器進行初始化以保證事務的加強處理,因此此時獲得的將是原樣的Service(沒有通過事務增強處理,故而沒有事務處理能力。 

還有一種方式是將service層改用xml配置,其實這樣作也是變相的讓springmvc沒法掃描service,而只能依賴父窗口也就是ServletContextListener來進行初始化,這樣一樣被賦予了事務性。 mvc

轉自:http://icanfly.iteye.com/blog/778401app

相關文章
相關標籤/搜索