在实际项目中,会包括很多spring与springMVC的配置,我们需要根据不同的模块划分来进行配置。
一般来说spring容器是负责所有非controller的Bean的注册管理,springMVC容器只负责controller的Bean的注册管理。
一、标准型方案 配置方案如下:
Spring容器配置,排除所有@Controller的Bean :
<context:component-scan base-package="com.suiminghan">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
SpringMVC容器配置,让其只包括@Controller的Bean :
<context:component-scan base-package="com.suiminghan" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
父容器是不能访问子容器中的内容的,但子容器可以访问父容器中的内容,这是spring规定的。
也就是我们常见的把service注入到controller中使用。
但也是由于访问方向的问题,父容器也就无法对子上下文容器中的controller进行事务管理。但其实标准型方案也没有必要controller进行事务管理。
二、快速开发型 配置方案如下:
SpringMVC容器配置,让其包括所有的Bean :
<context:component-scan base-package="com.suiminghan"></context:component-scan>
这种方案可以没有接口、没有实现类、没有乱七八糟的多层结构,只是为了快速开发出项目来。但是事务控制一定要有的吧,那就只能上升到controller层了。spring虽然不推荐但是也不会限制你这样做。
这种方案很明了了,只有springMVC一个容器,不存在父子容器访问问题。事务也就能正常工作了。
参考文章:https://blog.csdn.net/caomiao2006/article/details/51290494