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