Spring 与 Spring MVC 整合详解:父子容器机制与配置最佳实践
在企业级 Java Web 项目中,Spring(核心容器)与 Spring MVC(Web 框架)的整合是基础架构设计的关键环节。合理的整合能清晰划分业务逻辑层(Service、Dao) 与 Web 层(Controller、Interceptor) 的职责,避免配置混乱和 Bean 重复创建。从 “整合核心思想→配置步骤→关键问题解决→容器关系” 四个维度,彻底讲透 Spring 与 Spring MVC 的整合逻辑。
整合核心思想:父子容器机制
Spring 与 Spring MVC 整合的本质是创建两个独立但存在依赖关系的容器,即 “父子容器”,分别管理不同层级的 Bean,实现职责分离:
| 容器类型 | 加载者 | 配置文件 | 管理的 Bean 类型 | 核心职责 |
|---|---|---|---|---|
| 父容器 | ContextLoaderListener |
applicationContext.xml(Spring 核心配置) |
Service、Dao、数据源(DataSource)、事务管理器、第三方框架整合(如 MyBatis) | 处理业务逻辑、数据访问,提供全局共享的非 Web 组件 |
| 子容器 | DispatcherServlet |
springmvc.xml(Spring MVC 配置) |
Controller、HandlerInterceptor、ViewResolver、HandlerAdapter | 处理 Web 请求(路由、参数绑定、视图渲染) |
容器核心规则
- 加载顺序:父容器先初始化(
ContextLoaderListener在 Web 应用启动时执行),子容器后初始化(DispatcherServlet初始化时创建); - 访问权限:子容器可以访问父容器中的 Bean(如 Controller 注入 Service),但父容器不能访问子容器中的 Bean(如 Service 不能注入 Controller);
- Bean 优先级:若父子容器中存在同名 Bean,子容器的 Bean 会覆盖父容器的 Bean(但实际开发中应避免同名,确保职责分离)。
整合步骤:从配置到职责划分
整合分为 “web.xml 配置”“Spring 父容器配置”“Spring MVC 子容器配置” 三步,核心是明确两者的配置边界。
步骤 1:web.xml 配置 —— 指定容器加载规则
web.xml 是 Web 应用的入口配置文件,需同时配置父容器加载器(ContextLoaderListener)和子容器加载器(DispatcherServlet):