Skip to content

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 自动配置。除非你对框架非常底层非常熟悉,否则一般不建议这么做。

Based on Spring Framework.