You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring中@EnableWebMvc是什么?为何《Spring实战》配置与我的实践不同?

关于@EnableWebMvc和Spring MVC配置的困惑解答

嘿,我完全理解你的困惑——刚用Spring Boot的时候,确实会觉得“为什么书上写的这么复杂,我啥都没配也能用?”咱们一步步拆解:

1. 为什么你之前不需要@EnableWebMvc?

你之前开发基础Web应用时用的应该是Spring Boot,它的核心优势之一就是自动配置(AutoConfiguration)。Spring Boot的WebMvcAutoConfiguration类会帮你自动完成Spring MVC的基础配置:

  • 自动注册DispatcherServlet(Spring MVC的核心控制器)
  • 默认配置视图解析器(比如支持JSP、Thymeleaf等模板引擎)
  • 配置常用的消息转换器(比如JSON序列化)
  • 映射静态资源(比如/static/目录下的文件)

这就是为什么你不用加@EnableWebMvc也能正常开发——Spring Boot已经替你做了这些脏活累活。

2. 书中的配置是旧代码吗?

不一定是“旧代码”,更准确地说,是不同场景下的配置方式:

  • 如果书籍是基于**纯Spring Framework(非Spring Boot)**编写的(比如《Spring实战》的早期版本,在Spring Boot普及之前),那么必须手动添加@EnableWebMvc来启用Spring MVC,还要手动配置视图解析器、资源映射等——因为纯Spring没有自动配置的机制。
  • 新版本的《Spring实战》应该会区分Spring Boot和纯Spring的场景,但可能还是会保留手动配置的内容,因为这是理解Spring MVC底层原理的关键。

3. 这些配置还有实用价值吗?

当然有!当你需要定制Spring MVC的行为时,这些配置就必不可少了。举几个常见场景:

  • 自定义视图解析器:比如你想修改JSP文件的路径前缀/后缀,或者添加自定义的模板引擎支持
  • 调整JSON序列化规则:比如忽略null值、修改日期格式
  • 添加拦截器:比如做登录校验、日志记录
  • 自定义静态资源映射:比如把/files/**映射到本地磁盘的某个目录

在Spring Boot中,你有两种定制方式:

方式一:完全接管配置(对应书中的写法)

添加@EnableWebMvc,然后实现WebMvcConfigurer接口,重写方法来配置所有细节。这种方式会关闭Spring Boot的自动配置,完全由你掌控:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // 自定义JSP视图解析器
        registry.jsp("/WEB-INF/custom-views/", ".jsp");
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 自定义JSON转换器
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        converter.setObjectMapper(objectMapper);
        converters.add(converter);
    }
}

方式二:基于自动配置做扩展(更推荐)

不添加@EnableWebMvc,直接实现WebMvcConfigurer接口。这种方式会保留Spring Boot的默认配置,你只需要覆盖自己需要修改的部分:

@Configuration
public class CustomWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 添加自定义拦截器,不影响其他默认配置
        registry.addInterceptor(new LoggingInterceptor())
                .addPathPatterns("/api/**");
    }
}

总结

你之前没用到这些配置,是因为Spring Boot的自动配置已经满足了基础Web应用的需求。书中的内容不是没用,而是在教你理解Spring MVC的底层逻辑,以及如何在需要定制的时候手动配置——这些都是进阶开发必须掌握的技能。

内容的提问来源于stack exchange,提问作者Pasker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:10:40