在使用Spring时,通常会配置一个applictioncontext.xml 来指定ApplicationContext的相关信息。
当使用SpringMVC时,还会再另外指定一个[server-name]-servlet.xml (也可以是其它名称)文件。例如:
根据Web 容器创建过程,通常会创建ServletContext,再去初始化各个Serlvet。ContextLoaderListener属于Servlet Context Listener,所以会在创建ServletContext Listener时初始化。
通过之前对Spring的了解,ContextLoaderListener中会去创建并初始化ApplicationContext,其依据的是<context-param> </context-param>中配置的application-Context.xml。此时创建的ApplicationContext会作为一个parent 存在。
在创建并初始化DispatcherServlet时,会则会依据servlet-context.xml配置文件再创建一个WebApplictionContext ( child),并且此child WebApplicationContext会继承之前创建的那个parent ApplictionContext。
所以由ContextLoaderListener引起创建的parent ApplictionContext对child ApplicationContext是完全可见的。
现在大家都会采用注解的方式来将对象创建、组装的工作交给Spring来完成。如果application-Context.xml、servlet-context.xml中配置的component-scan中如果有重叠的包,就有可能
出现某个@Scope(singleton)类会创建两个对象的情况,这点是使用时要注意的。