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'


猜你喜欢

转载自blog.csdn.net/sinat_38259539/article/details/78435993