必须要说的是,父子容器是通过设置形成的关系。
容器实现了 ConfigurableApplicationContext 或 ConfigurableBeanFactory 接口,这两个接口中分别有setParent 及setParentBeanFactory 方法,可以将指定容器设置为当前容器的父容器。
首先,默认情况下,Spring + SpringMVC 框架的web项目,会先创建 WebApplicationContext(应用上下文环境,就是IoC容器啦),并以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE 为Key,将其存储到ServletContext 中 ---这就是根容器。
然后,创建DispatcherServlet ,注意,这是个Servlet,而Servlet也是有ServletContext 的,而且,它也会创建自己的IoC上下文(IoC容器)。这个IoC容器会去ServletContext 中查找根容器,并将其设为自己的父容器!!!---小疑问,这个ServletContext 和 IoC容器 是否一个???待验证。。
简单的可以推知:子容器可以访问父容器中的bean,父容器则无法访问子容器中的内容!!!
参考: