今天初次学习springMVC的时候,我跟着视频老师边听边做。按照老师的思想就是需要先用spring初始化一个父容器,用来管理一些底层公用的Bean,例如dao,service这些,然后用springMVC初始化一些上层的bean,例如controller,而springMVC本身就属于spring功能的一部分,他自己也有一个容器,是继承的spring父容器的一个子容器。那么父容器中的bean对于子容器就可用,反过来就不行。于是我分了spring的配置文件applicationContext.xml和springMVC的配置文件mvc-dispatcher-servlet.xml.
在spring的配置文件applicationContext.xml中,我用注解扫描service的包,并且过滤掉controller,如 坑人的context-param,让我记忆深刻
然后在springMVC的配置文件mvc-dispatcher-servlet.xml中配置扫描controller.
坑人的context-param,让我记忆深刻
于是在web.xml中配置加载spring和springMVC-dispatcher的上下文以及相应的类
坑人的context-param,让我记忆深刻
启动tomcat,出现问题了,发现本应该在父容器中实例化的service层的bean(test)无法注入到springMVC的子容器中的controller中,原因是该bean(test)未被实例化,
坑人的context-param,让我记忆深刻
进一步测试发现spring好像就和没有启动一样,因为他要负责管理的底层公用的bean全都没有被实例化,而上层springMVC负责管理的controller全都被实例化了两次 。坑人的context-param,让我记忆深刻
于是我使尽各种昏招,改配置文件,怀疑配置文件没有被加载,或是spring没有启动成功,问题还是解决不了。就这样各种办法试了一个下午,最终才发现,原来是这里出了问题
坑人的context-param,让我记忆深刻
他们的名字重复,导致前一个变量被后一个给覆盖了,改正,问题解决。

相关文章: