spring mvc 給action添加事務

本身單獨作了個小網站 可是發現action事務不起做用了 可是若是用service層就沒問題 找了不少辦法沒解決 最後本身解決了程序員

其實就是一個加載順序的問題web

首先使用了spring MVC的項目是不須要配置action bean  而是經過spring mvc的配置文件進行掃描註解加載的spring

spring事務配置文件還有上下文都是經過org.springframework.web.context.ContextLoaderListener加載的,編程

而spring MVC的action是經過org.springframework.web.servlet.DispatcherServlet加載的 mvc

這樣就有個優先級的問題了  web是先啓動ContextLoaderListener後啓動DispatcherServletjsp

ContextLoaderListener加載的時候action並沒在容器中,因此如今使用AOP添加事務或者掃描註解都是無用的。網站

那麼解決辦法就是在DispatcherServlet 加載spring-MVC配置文件後再進行一次AOP事務掃描和註解事務掃描就OK了spa

<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:config>  
    	<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.yang.web.*.action.*.*(..))"/>  
</aop:config>

至於爲何要在Action中加事務code

 

 spring in action 一書中也說過 service dao action 是很經典的組合但不是必須的,對於一個簡單的增刪改查系統,不必分那麼多層,好比一個簡單保存功能 無非就new 一個實體 映射參數 使用了spring jdbcTemplate 保存就一行代碼 就一個這麼簡單的功能有必要 一個service接口 一個service實現類 一行代碼調用一個dao接口一個dao實現類  要多建四個類 還要在spring上下文中配置  不累嗎?  對於一個簡單的系統而言這就是爲本身找不自在  明明蓋的是民房 硬要打摩天大樓的地基 orm

 

另有一篇博客也是這樣說的

 

 http://elf8848.iteye.com/blog/875830

 

 5、父子上下文(WebApplicationContext) 方法二激進型

 

方案二,激進型:

 

Java世界的「面向接口編程」的思想是正確的,但在增刪改查爲主業務的系統裏,Dao層接口,Dao層實現類,Service層接口,Service層實現類,Action父類,Action。再加上衆多的O(vopobo)和jsp頁面。寫一個小功能 七、8個類就寫出來了。 開發者說我就是想接點私活兒,和PHP,ASP搶搶飯碗,但我又是Java程序員。最好的結果是大項目能作好,小項目能作快。因此「激進型」方案就出現了—–沒有接口、沒有Service層、還能夠沒有衆多的O(vopobo)。那沒有Service層事務控制在哪一層?只好上升的Action層。

 

本文不想說這是否是正確的思想,我想說的是Spring不會限制你這樣作。

 

 

 

 

 

 

Java–大項目能作好–按傳統方式作,規規矩矩的作,好擴展,好維護。

Java–小項目能作快–按激進方式作,一週時間就能夠出一個版本,先上線接受市場(用戶)的反饋,再改進,再反饋,時間就是生命(成本)。

相關文章
相關標籤/搜索