1. 程式人生 > >如何給Spring MVC的action加上事務

如何給Spring MVC的action加上事務

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

首先使用了spring MVC的專案是不需要配置action bean,而是通過spring mvc的配置檔案進行掃描註解載入的,spring事務配置檔案還有上下文都是通過org.springframework.web.context.ContextLoaderListener載入的,而spring MVC的action是通過org.springframework.web.servlet.DispatcherServlet載入的,這樣就有個優先順序的問題了,web是先啟動ContextLoaderListener後啟動DispatcherServlet,在ContextLoaderListener載入的時候action並沒在容器中,所以現在使用AOP新增事務或者掃描註解都是無用的。

那麼解決辦法就是在DispatcherServlet載入的spring-MVC配置檔案後再加上AOP事務掃描配置就OK了

1 2 3 4 5 6 7 8 <tx:advice id="defaultTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="questionReply" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <
aop:config>   <aop:advisor advice-ref="defaultTxAdvice" pointcut="execution(* com.jeecms.cms.action.front.PhQuestionAct.*(..))"/>   </aop:config>

至於為什麼要在Action中加事務

spring in action 一書中也說過 service dao action 是很經典的組合但不是必須的,對於一個簡單的增刪改查系統,沒必要分那麼多層,比如一個簡單儲存功能 無非就new 一個實體 對映引數 使用了spring jdbcTemplate 儲存就一行程式碼 就一個這麼簡單的功能有必要 一個service介面 一個service實現類 一行程式碼呼叫一個dao介面一個dao實現類  要多建四個類 還要在spring上下文中配置不累嗎?對於一個簡單的系統而言這就是為自己找不自在,明明蓋的是民房,硬要打摩天大樓的地基。