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 定义 HandlerMappingHandlerAdapter,但这非常繁琐且容易出错。 推荐方案

  • 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.