WebMvcConfigurationSupport vs WebMvcConfigurer 的本质区别

news/2025/11/6 16:31:19/文章来源:https://www.cnblogs.com/Marktowin/p/19196920

springboot项目中MVCconfiguration配置是继承WebMvcConfigurationSupport还是实现WebMvcConfigurer 呢?这两者有什么区别呢?

WebMvcConfigurationSupport

  WebMvcConfigurationSupport 是 Spring MVC 的底层配置类,继承了它,Spring Boot 会检测到你提供了自己的 MVC 配置

  • Spring Boot 的 WebMvcAutoConfiguration(自动配置)会完全失效
  • 所有默认配置都没了,包括:
    • ✗ 静态资源映射
    • ✗ 消息转换器
    • ✗ 格式化器
    • ✗ SpringDoc 的自动配置
    • ✗ 其他很多默认功能
  • 继承 WebMvcConfigurationSupport 时,必须手动配置所有资源映射

WebMvcConfigurer 

  WebMvcConfigurer 是 Spring MVC 的扩展接口

  • 实现它只是添加/增强配置,不会覆盖
  • Spring Boot 的自动配置继续生效
  • 自定义配置会叠加在默认配置之上
  • 实现 WebMvcConfigurer 时,Spring Boot 已经自动配置好了:
    •   /static/ 目录自动映射
    •   /webjars/** 自动映射(包括 SpringDoc 的资源)

 

1 public class WebMvcConfiguration extends WebMvcConfigurationSupport {
2     // 完全覆盖 Spring Boot 的 Web 自动配置
3 }
4 
5 public class WebMvcConfiguration implements WebMvcConfigurer {
6     // 只是增强,不会破坏 Spring Boot 的自动配置
7 }

两者作用总结:

类/接口作用典型用法
WebMvcConfigurer Spring Boot 提供的扩展点接口,允许你“定制”Spring MVC 的默认行为 实现接口(或使用 @Configuration + implements WebMvcConfigurer)添加拦截器、格式化器、CORS 等
WebMvcConfigurationSupport Spring MVC 的底层配置类基类,相当于自己“接管整个 MVC 配置” 继承它来自定义 MVC 配置(但会屏蔽 Spring Boot 自动配置)

核心区别:

对比点WebMvcConfigurerWebMvcConfigurationSupport
类型 接口 抽象类
默认配置 不影响 Spring Boot 的自动配置 一旦继承它,会禁用 Spring Boot 自动配置(例如静态资源、默认视图解析器等)
使用方式 推荐在 @Configuration 类中实现 仅在需要完全自定义 MVC 时使用
多配置共存 可以定义多个 WebMvcConfigurer Bean(Spring 会合并) 只能有一个 WebMvcConfigurationSupport 子类
常见场景 添加拦截器、消息转换器、CORS、自定义参数解析器等 编写框架/SDK 或需要完全控制 MVC 配置(很少见)

推荐用法:

 1 @Configuration
 2 public class MyWebMvcConfig implements WebMvcConfigurer {
 3 
 4     @Override
 5     public void addInterceptors(InterceptorRegistry registry) {
 6         registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
 7     }
 8 
 9     @Override
10     public void addCorsMappings(CorsRegistry registry) {
11         registry.addMapping("/**").allowedOrigins("*");
12     }
13 }

高级用法:

1 @Configuration
2 public class MyMvcConfiguration extends WebMvcConfigurationSupport {
3 
4     @Override
5     protected void addInterceptors(InterceptorRegistry registry) {
6         registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
7     }
8 }

但这样一来:

  • Spring Boot 默认的静态资源访问(如 /static/**, /public/**)会失效;

  • 默认的 RequestMappingHandlerAdapterMessageConverters 等配置也会被覆盖;

  • 需要手动补回全部配置

因此如果只是加个拦截器或格式化器,不建议用这个。

内部原理简述:

  • WebMvcAutoConfiguration(Spring Boot 提供)默认会加载一套 MVC 配置;

  • 该配置会自动检测是否存在一个继承 WebMvcConfigurationSupport 的类:

    • 如果有,则跳过 Boot 自动配置

    • 如果没有,则启用默认配置;

  • WebMvcConfigurer 的实现类只是往默认配置中“追加配置”,不会替换掉原有的。

对比总结:

image

 常见使用坑:

  • ❌ 误继承 WebMvcConfigurationSupport → 导致静态资源、Swagger 页面、favicon 等访问 404

  • ❌ 同时存在多个 WebMvcConfigurationSupport 子类 → 启动报错或配置混乱

  • ✅ 想“局部增强”时实现 WebMvcConfigurer 是最稳妥的方案

启动日志对比

extends WebMvcConfigurationSupport:
2025-11-05 09:54:19.928  INFO ... Tomcat started on port 8090
2025-11-05 09:54:19.945  INFO ... Started SmartAlbumApplication in 5.948 seconds

❌ 没有 SpringDoc 初始化日志 → SpringDoc 没有启动

implements WebMvcConfigurer:
重启后能看到类似这样的日志:
INFO ... Initializing Spring DispatcherServlet 'dispatcherServlet'
INFO ... Initialized SpringDoc OpenAPI
INFO ... Started SmartAlbumApplication in X.XXX seconds
 ✅ SpringDoc 正常初始化 → Swagger UI 可以访问

总结

在 Spring Boot 项目中:

  • 🎯 90% 的情况用 implements WebMvcConfigurer(推荐)
  • ⚠️ 只有需要完全自定义 MVC 配置时才用 extends WebMvcConfigurationSupport
  • 💡 记住:继承会覆盖,实现会增强

 

目的建议使用
想在 Boot 默认 MVC 上扩展 WebMvcConfigurer
想完全控制 MVC 行为(例如做自定义框架、二次封装) ⚠️ WebMvcConfigurationSupport
想自定义静态资源路径但仍保留默认功能 ✅ 使用 WebMvcConfigurer 而非继承 Support

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成功拿到备案号 | 详述大模型备案

本文详解备案流程,旨在帮助企业和开发者顺利完成备案,确保企业成功拿到大模型备案号。 团队目前已经协助其他团队备案通过了多家大模型备案。 一、政策要求做大模型备案 大模型备案是中国国家互联网信息办公室为加强…

MATLAB与ModBus RTU设备进行串行通信

使用MATLAB与ModBus RTU设备进行串行通信的代码及说明,分为高级封装方法(推荐)和底层手动实现两种方案:一、高级封装方法(推荐,需Instrument Control Toolbox) 使用MATLAB内置的modbus对象简化通信流程,自动处…

2025年艾草贴厂家权威推荐榜单:老北京足贴/蒸汽眼罩/泡澡液源头生产厂家精选

艾草贴作为大健康领域的热门产品,凭借其简便的使用方法、温和的作用机理和明确的体验效果,在眼部护理、肩颈放松、足部保健等日常健康护理场景中发挥着重要作用。本文将基于个人护理用品行业标准与发展趋势,为您深入…

封装新纪元

在电子设计领域,IC 封装不仅是保护芯片的重要技术,更是推动微型化、性能提升与系统可靠的关键支撑。本文带你走进封装世界,从传统到未来趋势,感受封装技术如何推动电子不断进化。 1、封装类型一览与演进趋势 DIP(…

高精度板子

从网上当的 const int maxn = 50000; struct bign{ int d[maxn], len; void clean() { while(len > 1 && !d[len-1]) len--; } bign() { memset(d, 0, sizeof(d)); len = 1; } bign(int num)…

成都恒利泰宽带锥形电感,一颗顶三颗

成都恒利泰宽带锥形电感,一颗顶三颗2015年,成都诞生了一家专注于射频无源器件的公司——成都恒利泰科技有限公司,在研发、制造和销售上提供 20多条产品线包括:LTCC/LC滤波器、功分器、巴伦变压器、耦合器、射频转接…

微算法科技(NASDAQ MLGO)采用动态层次管理和位置聚类技术,修改pBFT算法以提高私有区块链网络运行效率

在数字化转型加速的背景下,私有区块链网络面临着效率与扩展性的双重挑战。传统实用拜占庭容错算法(pBFT)在节点规模扩大时,通信复杂度呈指数级增长,导致共识时延增加和资源消耗加剧。与此同时,静态网络架构无法动…

2025年上海展览特装制作公司权威推荐榜单:标摊设计/标摊装修/展厅设计及施工源头公司家精选

在会展经济蓬勃发展的上海,一个精心打造的展台能帮助企业在众多参展商中脱颖而出。 据上海会展行业协会数据显示,2025年上海展会总面积预计将突破2000万平方米,同比增长12.7%,其中特装展位占比高达65.3%。 面对日益…

2025年PE-RT管材管件批发厂家权威推荐榜单:ppr电熔管件/PERT电熔管件/PERT2型管件源头厂家精选

在市政供暖、建筑给排水和工业管道系统领域,PE-RT管材管件以其卓越的耐温性能和长久的使用寿命,正成为越来越多工程项目的首选材料。面对市场上众多的生产厂家,如何选择可靠的产品供应商成为工程项目成功的关键因素…

2025年透明吹塑HDPE防撞桶改性再生颗粒生产厂家权威推荐:环保连卷袋吹膜级透明HDPE颗粒/挤塑透明HDPE再生颗粒/透明吹塑HDPE水箱改性再生颗粒源头生产商精选

透明吹塑HDPE防撞桶改性再生颗粒作为塑料资源循环利用的高价值产品,凭借其优异的力学性能、稳定的加工特性和显著的成本优势,在道路安全设施、市政工程、包装容器等领域发挥着重要作用。本文将基于塑料再生行业标准与…

护航“苏超”票务稳健运行!这朵云,靠谱!

首届江苏省城市足球联赛(简称“苏超”)已于近日圆满落幕,总决赛以单场62329名现场观众的佳绩,创下了全国业余足球赛事的最高上座纪录。整个赛季持续火热的观赛需求,屡次在售票期间形成瞬时流量洪峰,如何保障系统…

doris命令show proc /current_queries;

current_queries : 查看正在执行的查询列表,当前正在运行的 SQL 语句。-- 查看查询内存使用SHOW PROC /current_queries-- 终止内存占用过大的查询KILL QUERY "query_id";

2025 国内靠谱的代理 IP 哪家好选择指南​

国内代理 IP 凭借 “匿名防护、多场景适配、稳定访问” 的核心优势,成为企业合规数据采集、多账号安全运营、个人隐私保护等场景的关键工具。随着国内网络安全法规完善与平台反侦测技术升级,市场对代理 IP 的匿名度、…

2025年石膏基自流平生产商权威推荐:水泥自流平砂浆/石膏自流平砂浆/地面找平自流平源头厂家精选

石膏基自流平材料作为现代建筑地坪施工的核心材料,凭借其卓越的流动性能、快速的施工效率和稳定的物理特性,在建筑地坪找平、工业厂房地面、快速装修工程等领域发挥着重要作用。本文将基于建筑材料行业标准与发展趋势…

深入解析:webSocket快速入门

深入解析:webSocket快速入门pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

2025年青岛城阳注册个体户服务权威推荐:青岛城阳公司变更服务/青岛城阳变更营业执照机构/青岛城阳公司减资服务机构精选

在"大众创业、万众创新"的时代浪潮下,个体经营已成为推动城阳区经济发展的重要力量。2024年青岛新增个体工商户超5万户,城阳区作为青岛北部重要城区,其个体经济活力持续增强。本文将基于市场调研数据,为…

11.6 考试总结

11.6 考试总结 T1比较简单,做完读了下后面的题,T2是困难期望题,T3感觉可以DP但是复杂度比较炸,T4是个大模拟。 T2想了半个多小时没做出来。 权衡了一下,如果是正式考试就把T2写个简单部分分然后跳了去后面多拿点分…

Redis的Hash解析 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

软件工程实践团队项目第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559这个作业的目标 定制ai智能体…

水仙数练习循坏

include<stdio.h> int main() { int n,d; scanf("%d",&n); int f=1; int i=1; while(i<n) { f=f*10; i++; } i=f; //遍历n位的所有数 while(i<f*10){ //操作容易对i造成破坏,故用t来替换i…