spring 启动流程大致归结为三点:
- 在web容器(tomcat,jboss,…)启动后,会创建一个全局的上下文servletcontext,为其后面的 spring Ioc容器提供宿主环境
- 由于contextLoaderListener 实现了servletContextListener,因此在sercletContext 创建后,其contextInitialized 方法会自动调用,在这个方法中spring会启动一个根上下文 webApplicationContext,这个就是Ioc 容器,其对应的bean配置由web.xml中的context-param标签指定。在这个Ioc容器初始化完毕后会将其已key为webApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE存储在servlerContext中
- contextLoaderListener 监听器初始化完毕后,开始初始化web.xml 中配置的Servlet,这里是DispatcherServlet,这个servlet实际上是一个标准的前端控制器,用以转发,匹配,处理每个servlet请求。DIspatcherServlet 上下文初始化是建立自己的Ioc上下文用以持有spring mvc 相关的bean.在建立DIspatcherServlet 自己的Ioc上下文时,会利用webApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE先从servletContext 中获取根上下文作为自己的父节点上下文