ContextLoaderListener该类是一个listener,实现类ServletContextListener接口,当tomcat启动后会调用这个类的contextInitialized方法,该方法会创建这个web应用的spring bean容器(应用上下文),这个容器使用了通过contextConfigLocation定义的xml文件(bean相关的配置文件),他是一个根上下文,在web.xml中还会配置一下servlet,例如dispatcherservlet,他也会有自己对应的xml文件(bean相关的配置文件),并且通过这个配置文件他也会创建一个servlet相关的spring bean容器(也是一个上下文),前面的应用上下文是这个上下文的父上下文,查找bean时是先从父上下文中找,然后再到自上下文中找

contextInitialized->initWebApplicationContext->

  1. createWebApplicationContext->determineContextClass(决定使用的applicationcontext的实现类,如果没有在web.xml中配置contextClass元素,默认使用ContextLoader.properties文件中定义的XmlWebApplicationContext)

  2. configureAndRefreshWebApplicationContext->refresh(这个refresh就是真正applicationcontext初始化的开始,也就是查找bean定义,提取bean的信息保存为beandefinition,然后放到一个hashmap里,供之后创建bean和依赖注入时使用,创建bean和依赖注入是在调用getbean方法时触发的,但在refresh方法中会创建单例的bean,通过finishBeanFactoryInitialization来完成。