我们知道,在一个大的项目中,不可能只有一个Spring的IOC容器,它可能会有多个IOC容器,如一个配置Service层的bean,一个配置controller层的bean。但是我们在controller层中使用@autowired注解注入了service层的bean,所以service的bean就必须要在controller的bean之前已经注入到IOC容器中,且service的bean所在的IOC容器必须是父容器parent,controller的bean所在的IOC容器必须是子容器,这样controller的bean才可以引用service的bean。正常来说,我们在FrameworkServlet类的方法createWebApplicationContext中可以看到,Spring会将Maven工程中的resources下的IOC容器设置成父容器,而将WEB-INF下的容器统一 的认定前面那个容器为父容器。需要注意的是:子容器可以引用父容器的内容,父容器不可以应用子容器的内容。
Spring容器之间的关系:Spring容器之间是互相包含的关系,即不同Spring容器之间的bean是可以互相引用。
Spring和SpringIOC容器之间的关系:Spring容器包含SpringIOC容器,是Spring父容器,即Spring父容器不可以引用子容器的bean,而SpringMVC子容器可以引用父容器的bean。
SpringMVC容器默认的名称时servelet-dispacher.xml,存放于WEB-INF下,这也间接的证明了resources下的IOC容器是WEB-INF下的IOC容器的父容器。