Spring MVC 和 Spring 整合的時候,SpringMVC的springmvc.xml文件中 配置掃描包,不要包含 service的註解,Spring的applicationContext.xml文件中 配置掃描包時,不要包含controller的註解,以下所示: SpringMVC的xml配置: <context:component-scan base-package="com.insigma"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan> Spring MVC啓動時的配置文件,包含組件掃描、url映射以及設置freemarker參數,讓spring不掃描帶有@Service註解的類。爲何要這樣設置?由於springmvc.xml與applicationContext.xml不是同時加載,若是不進行這樣的設置,那麼,spring就會將全部帶@Service註解的類都掃描到容器中,等到加載applicationContext.xml的時候,會由於容器已經存在Service類,使得cglib將不對Service進行代理,直接致使的結果就是在applicationContext 中的事務配置不起做用,發生異常時,沒法對數據進行回滾。以上就是緣由所在。 一樣的在Spring的xml配置以下: <context:component-scan base-package="com.insigma">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> 掃描包路徑,不掃描帶有@Controller註解的類。由於這些類已經隨容器啓動時,在springmvc.xml中掃描過一遍了。 完成以上工做spring
注意以上幾點就OK了。express