这篇博客写一下对spring和springmvc父子容器的理解。
一、首先明确:
(1)spring是一个大的父容器,springmvc是其中的一个子容器。父容器不能访问子容器对象,但是子容器可以访问父容器对象。
(2)一般做一个ssm框架项目的时候,扫描@controller注解类的对象是在springmvc容器中。而扫描@service、@component、@Repository等注解类的对象都是在spring容器中。
二、关系图
三、举例说明
例如在淘淘商城这样一个项目中,用的就是ssm框架,如果我们不在springmvc.xml中去设置@controller的扫描包,而是在spring框架对应的配置文件applicationContext.xml中去设置一个全局扫描包
<context:component-scan base-package="com.taotao"></context:component-scan>
运行工程就会看到报404错误,显示找不到controller对象。这是因为springmvc.xml中没有扫描包,就不会去扫描生成Controller对象,而父容器不能访问子容器对象,所以说spring框架也不能装载controller类,也就没有control类。
当然,我们做过很多只在springmvc框架中配置全局扫描包的项目,这里也印证了子容器可以访问父容器对象。
四、拓展
那么springmvc这么快速而且轻量级为什么还经常配合spring框架来进行扫描包的配置。
这里我想有两个原因:
(1)体现一种分层的思想,更利于工作中去找到一些问题的所在,比如视图解析器一些东西要配置在spring容器里更好一些
(2)我们需要拓展这个项目的时候,有时候要用到struts等其他框架,这时候就需要spring容器框架去整合拓展其他的框架。