Web MVC 框架配置 (Web MVC Config)
应用程序可以显式的声明在 特殊 Bean 类型 中列出的基础设施 Bean,这些 Bean 是处理请求所必需的。DispatcherServlet 会在 WebApplicationContext 中检查每个特殊 Bean。如果没有匹配的 Bean 类型,它将回退到 DispatcherServlet.properties 中列出的默认类型。
在大多数情况下,MVC 配置 (MVC Config) 是最佳的起点。它以 Java 或 XML 的形式声明所需的 Bean,并提供一个更高级别的配置回调 API 来进行自定义。
注意
Spring Boot 依赖 MVC Java 配置来配置 Spring MVC,并提供了许多额外的便捷选项。
补充教学
1. 默认配置的“幕后功臣”:DispatcherServlet.properties
如果你在 Spring MVC 项目中什么都不配置(没有 @EnableWebMvc,没有 XML),请求依然能被映射到 Controller 吗? 答案是肯定的。 这是因为 DispatcherServlet.properties 文件充当了“安全网”。它定义了默认的策略,例如:
- 默认使用
RequestMappingHandlerMapping。 - 默认使用
RequestMappingHandlerAdapter。 - 默认使用
InternalResourceViewResolver。
了解这一点对于排查“为什么我没配置视图解析器它也能跳转?”之类的问题至关重要。
2. 为什么推荐使用 MVC Config API?
虽然你可以手动通过 @Bean 定义 HandlerMapping 或 HandlerAdapter,但这非常繁琐且容易出错。 推荐方案:
- Java 配置:实现
WebMvcConfigurer接口并标注@EnableWebMvc。 - XML 配置:使用
<mvc:annotation-driven/>。
这些高级别 API 会为你自动注册并配置一整套协同工作的特殊 Bean,并允许你通过覆盖简单的方法(如 addInterceptors, addViewControllers)来进行微调。
3. Spring Boot 的“自动驾驶”模式
在 Spring Boot 中,你通常不需要加 @EnableWebMvc。
- Spring Boot 的策略:它通过
WebMvcAutoConfiguration自动为你配置好了绝大多数常用的功能(如静态资源处理、JSON 序列化等)。 - 千万小心:如果你在 Spring Boot 项目中手动加了
@EnableWebMvc,你实际上是开启了“完全手动挡”模式,这会禁用 Spring Boot 的大部分 MVC 自动配置。除非你对框架非常底层非常熟悉,否则一般不建议这么做。