Spring MVC Web 上下文初始化机制详解:从 web.xml 到注解配置
Web 上下文(WebApplicationContext)是 Spring MVC 在 Web 环境中的核心容器,负责管理 Bean 的生命周期并与 Servlet 容器集成。其初始化过程与 ServletContext 紧密绑定,生命周期完全一致。从 “传统 web.xml 配置→ContextLoaderListener 工作原理→Servlet 3.0 注解配置” 三个维度,彻底解析 Spring MVC Web 上下文的初始化机制。
Web 上下文与 ServletContext 的关系
在 Web 应用中,ServletContext 是 Servlet 容器(如 Tomcat)提供的全局上下文对象,代表整个 Web 应用,生命周期从应用启动到停止。而 Spring 的 WebApplicationContext 是 Spring 在 Web 环境中的 IOC 容器,依赖 ServletContext 存在,并通过 ServletContext 存储和获取,两者生命周期完全同步。
- 存储位置:
WebApplicationContext初始化后,会以固定键值(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,即org.springframework.web.context.WebApplicationContext.ROOT)存入ServletContext的属性中,方便后续获取。 - 核心作用:
WebApplicationContext管理 Web 相关的 Bean(如 Controller、Service、Repository 等),并整合 Spring 与 Servlet 容器的交互(如请求处理、会话管理等)。
传统配置:基于 web.xml 与 ContextLoaderListener
在 Servlet 3.0 之前,Web 上下文的初始化依赖 web.xml 配置,核心是通过 ContextLoaderListener 触发初始化流程。

1. web.xml 核心配置
1 | <!-- 1. 配置 ContextLoaderListener:触发 Web 上下文初始化 --> |
ContextLoaderListener:实现ServletContextListener接口,监听ServletContext的初始化和销毁事件,是 Web 上下文的 “启动器”。contextConfigLocation:指定 Spring 配置文件的位置,若不配置则使用默认路径(/WEB-INF/applicationContext.xml)。
ContextLoaderListener 工作原理
ContextLoaderListener 继承 ContextLoader 类,通过重写 ServletContextListener 的回调方法,将 Web 上下文的初始化与 ServletContext 生命周期绑定。
