SpringBoot MVC配置:WebMvcConfigurer、WebMvcConfigurationSupport、WebMvcConfigurerAdapter

继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器 主要介绍了继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

目录

【一】基本定义与对比

【二】版本背景和演进历史

【三】三个的主要职责和设计目标

① WebMvcConfigurer

② WebMvcConfigurationSupport

③ WebMvcConfigurerAdapter

【四】SpringBoot 的自动配置细节

【五】源码分析:Spring MVC 核心调用链

【六】实际项目的推荐策略



【一】基本定义与对比

特性WebMvcConfigurerWebMvcConfigurationSupportWebMvcConfigurerAdapter
类型接口抽象类抽象类
主要用途增量扩展MVC配置全局接管并替换所有MVC配置简化实现(旧时代适配器)
Spring Boot 自动配置兼容,会融合不兼容,会失效同 WebMvcConfigurer(废弃前使用)
适合场景90% 的定制化需求需要完全替换默认MVC配置Java 8前避免写所有空方法(废弃)


【二】版本背景和演进历史

1️⃣ Spring 3.1

  • 引入 WebMvcConfigurer 接口

  • 允许按需扩展MVC配置(拦截器、格式化器、视图解析器)

2️⃣ Spring 4.x

  • Java 8 之前,接口没有 default 方法

  • 为了解决「实现接口需要实现所有方法」的问题,提供了 WebMvcConfigurerAdapter 作为抽象类,该类所有方法都是空实现,只重写需要的即可。

3️⃣ Spring 5.x

  • java8之后接口可以有 default 方法,WebMvcConfigurer 所有方法都自带默认实现,所以WebMvcConfigurerAdapter 就被标记为废弃。

4️⃣ WebMvcConfigurationSupport

  • 从早期版本就有,是Spring MVC核心的配置基类

  • 里面包含了所有的 HandlerMapping、HandlerAdapter、MessageConverters、Validator 等 Bean 的完整声明。


【三】三个的主要职责和设计目标

① WebMvcConfigurer

✅ 设计目标

  • 扩展点(Extension Point)

  • 不接管,不替换

  • Spring 默认配置会和扩展的配置合并

✅ SpringBoot 特性

  • 自动扫描所有实现了 WebMvcConfigurer 的 Bean

  • 自动调用它们的 addInterceptors / configureMessageConverters 等方法

  • 多个 configurer 可以合并

✅ 示例

@Configuration 
public class MyMvcConfig implements WebMvcConfigurer { 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) {    

       registry.addInterceptor(new MyInterceptor()); 
    } 
}

✅ 特点

  • 最小侵入

  • 推荐在微服务/企业项目里用


② WebMvcConfigurationSupport

✅ 设计目标

  • 模板基类(Template Support)

  • 提供所有核心Bean的完整、可覆盖定义

✅ 机制

  • 里面声明了 @Bean

    • RequestMappingHandlerMapping

    • RequestMappingHandlerAdapter

    • ExceptionHandlerExceptionResolver

    • FormattingConversionService

    • MessageConverters

    • Validator

    • ContentNegotiationManager

    • ViewResolver

  • 这些 Bean 是 DispatcherServlet 的骨架配置

✅ 继承后效果

  • Spring Boot 的自动配置会失效

  • 你的配置类会接管全部 MVC 配置

  • 你需要自己声明所有 Bean,否则会缺失

✅ 特点

  • 适合深度扩展彻底订制的场景,高度可控,但配置复杂。

✅ 典型用途

  • 你要完全替换 Spring Boot 的默认 MVC 行为

  • 多 DispatcherServlet 实现


③ WebMvcConfigurerAdapter

  • 纯粹是为了 Java 8 之前没有接口默认方法,是个空实现适配器

  • Spring 5+ 以后已废弃,官方建议直接实现 WebMvcConfigurer


【四】SpringBoot 的自动配置细节

Spring Boot 的核心逻辑:

✅ 自动配置默认使用 DelegatingWebMvcConfiguration

  • 这个是内部的 @Configuration

  • 继承自 WebMvcConfigurationSupport

  • 特点:

    • 注入所有 WebMvcConfigurer

    • 调用它们的扩展方法

    • 再定义所有 Bean

✅ 逻辑链路(简化版):

@EnableWebMvc --> WebMvcConfigurationSupport 没有@EnableWebMvc --> DelegatingWebMvcConfiguration(Spring Boot 自动配置里注册)

✅ 当你用了:

  • @EnableWebMvc

  • 继承 WebMvcConfigurationSupport
    Spring Boot 的 DelegatingWebMvcConfiguration 就会被排除。

✅ 结果

  • 自动配置消失

  • 你必须自己声明所有 HandlerMapping、MessageConverters 等 Bean


【五】源码分析:Spring MVC 核心调用链

🔎 WebMvcConfigurationSupport 的关键源码结构

@Bean 
public RequestMappingHandlerMapping requestMappingHandlerMapping() {  

    RequestMappingHandlerMapping mapping = createRequestMappingHandlerMapping(); // set Order, interceptors, etc. return mapping; 
} 

@Bean 
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() { 

    RequestMappingHandlerAdapter adapter = createRequestMappingHandlerAdapter(); // set Converters, ArgumentResolvers, etc. return adapter; 
}

✔️ 你继承后可以覆盖这些方法
✔️ 全部自己定制


🔎 DelegatingWebMvcConfiguration(Spring Boot 的自动配置核心)

@Configuration 
public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport { 

    @Autowired(required = false) 
    private List<WebMvcConfigurer> configurers; 

    @Override 
    protected void addInterceptors(InterceptorRegistry registry) { 
        for (WebMvcConfigurer configurer : this.configurers) {     

            configurer.addInterceptors(registry); 
        } 
    } 
}

✔️ 关键设计

把所有 WebMvcConfigurer 的方法调用一遍,真正实现「可插拔、可组合」的配置扩展


【六】实际项目的推荐策略

✅ 推荐 大部分的业务场景使用 WebMvcConfigurer,Spring Boot 自动完成整合,低侵入、低维护成本。

✅ 特殊场景需要全局自定义的情况,继承 WebMvcConfigurationSupport接管所有配置,适合网关、自研框架、需要多 DispatcherServlet等场景。

✅ 不推荐 WebMvcConfigurerAdapter(已废弃)

智慧城市项目实战:如何将你的地理数据从城市坐标系(如上海2000)转换到国家CGCS2000? 本文详细介绍了智慧城市项目中地理数据坐标系转换的全流程解决方案,重点讲解如何将城市坐标系(如上海2000)转换到国家CGCS2000。通过七参数布尔莎模型、ArcGIS Pro、QGIS开源方案及Python编程实现,帮助实施团队解决坐标系不统一的技术难题,确保空间分析精度。 阅读详情

相关推荐

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 371

WebMvcConfigurationSupport 详解

四个MVC配置类的关系 WebMvcConfigurerAdapter WebMvcConfigurer WebMvcConfigurationSupport WebMvcAutoConfiguration WebMvcConfigurer 为接口 WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法,是 WebMvcConfigurer的子类实现,由于Java8中可以使用default关键字为接口添加默认方法,为在源代码中spring5.0之后就

zpx_Smart的博客 1万+

小白跑WRF第三天,安装三方依赖库

小白跑WRF第三天,安装三方依赖库各类安装包的准备 各类安装包的准备 官网教程:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php 根据官网教程需要的安装包有以下几个 系统环境 用途 zlib-1.2.7 zlib是提供数据压缩用的函式库。 netcdf-4.1.3 读nc文件的。 mpich-3.0.4 用于并行运算的工具。 libpng-1.2.50 libpng是一款C语言编写的比较底层

weixin_42372313的博客 1万+

MVC配置类之WebMvcConfigurationSupport

在spring中配置webMvc有两种方法,一种是继承WebMvcConfigurationSupport,另一种方式就是继承WebMvcConfigurer,但是要多加一个@EnableWebMvc注解。是一个接口,用于配置全局的SpringMVC的相关属性,采用JAVABEAN的方式来代替传统的XML配置文件,提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。类是SpringMVC提供的扩展类,用于提供拦截器、资源处理器等注册功能。

qq_33286757的博客 4174

MobileViT替换YOLOv11主干网络:轻量化新思路-(用MobileViT等轻量视觉Transformer降低计算成本)

在计算机视觉领域,目标检测一直是核心任务之一,而YOLO(You Only Look Once)系列算法因其出色的速度-精度平衡成为工业界和学术界的热门选择。随着YOLOv11的推出,模型性能达到了新的高度,但其计算复杂度和参数量也随之增加,这对资源受限的移动设备和嵌入式系统提出了挑战。与此同时,视觉Transformer(ViT)的出现为计算机视觉带来了全新范式,但其庞大的计算需求限制了在移动端的应用。MobileViT作为一种创新的轻量级视觉Transformer架构,巧妙结合了CNN的归纳偏置优势和V

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1646

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linuxschedule()函数的原理和调用的时机 schedule()函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice命令) 多级反馈队列调度 时间片轮转 使用nice命令 聊内存分配,进程内存分配,段页式存

大模型大数据攻城狮的专栏 4163

WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)

在日常开发中推荐优先使用WebMvcConfigurer的方式(官方推荐),因为简单方便,也没有特别复杂的定制需求;若我们项目中使用的MVC存在着更加复杂的配置需求推荐WebMvcConfigurationSupport,通过继承此类,我们可以说对官方的MVC代码进行重写操作,但是因为其配置量较大,实现比较复杂,因此在日常开发中使用WebMvcConfigurationSupport并不常见。常用自定义配置如下:1.addInterceptors(拦截器配置)

o0way0o的博客 7218

Arduino与震动马达模块握手

震动马达模块采用采用高品质手机震动马达,适用于震动感互动产品的制作,可穿戴智能设备震动提醒,适合作为非可听指示器的小型振动马达。当输入为高电平时电动机会震动,就像你的静音模式的手机一样。

vor234的博客 5847

Springboot--WebMvcConfigurationSupport详解

WebMvcConfigurationSupport是webmvc的配置类,如果在springboot项目中,有配置类继承了WebMvcConfigurationSupport,那么webmvc的自动配置类WebMvcAutoConfiguration就会失效。该注解表示只有当spring的容器中没有装载继承了WebMvcConfigurationSupport类型的bean时,自动配置类才会生效。**使用WebMvcConfigurationSupport配置webmvc的一些方法**......

m0_56555119的博客 4322

硬件知识点-----SPI串联电阻、振铃、过冲

电阻取值,没有公式,一被传输线的特征阻抗为50欧姆左右,而TTL电路输出电阻大桃为13欧姆左右,在源端串一个33姆,大致和50相当,这样就可以柳制从终端反射回来的倍号,防止再次反射。传输时间tp=L/V,其中L是导线长度,V是电磁波在电路板中的传输速度V=C/sqrDk,其中Dk是光速衰减因子,对于电路板而言是铜线,Dk=4电磁波在电路板中的速度都是慢于光速的。实际上串联多大的电阻与传输线的阻抗有关,为了保证阻抗的连续性,如果传输线的特性阻抗 Z0与驱动源的输出阻抗 Zd不匹配,会引发信号的反射。

贾saisai的博客 2714

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

zilan23的博客 3641

WebMvcConfigurationSupport与WebMvcConfigurer

在spring中配置WebMvc时有两种方法,一种是继承WebMvcConfigurationSupport,重写里面相应的方法,还有一种是继承WebMvcConfigurer的子抽象类WebMvcConfigurerAdapter,也是重写里面相应的方法,但是需要在配置类上添加@EnableWebMvc注解。那这两个类直接是什么关系呢?   细心的开发者会发现,WebMvcConfigurati...

醉逸鎏年的博客 2372

2、机器人控制技术:阻抗/导纳控制与强化学习的融合

本文探讨了阻抗/导纳控制与强化学习在机器人控制中的融合应用。阻抗/导纳控制广泛应用于外骨骼和跟踪控制,通过改进方案提升建模误差下的鲁棒性;强化学习则为解决维度灾难、实现最优交互提供了有效途径,尤其在大输入空间、连续时间系统、冗余机器人及鲁棒控制中表现突出。结合近似器与合理奖励设计,强化学习可在无模型情况下实现高效控制。未来,两者融合有望推动更智能、更安全的机器人系统发展。

ice55的博客 299

springboot mvc 配置WebMvcConfigurerAdapter 过时使用WebMvcConfigurer 或者WebMvcConfigurationSupport

配置拦截器: package top.mschen.blog.common.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.Handle...

大大肉包博客 622

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WebMvcConfigurerAdapter与WebMvcConfigurer与WebMvcConfigurationSupport与WebMvcAutoConfiguration关系

WebMvcConfigurerAdapter与WebMvcConfigurer与WebMvcConfigurationSupport与WebMvcAutoConfiguration 首先以上4个类都是springboot中mvc的支持类 WebMvcConfigurer 为接口 WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法 ;是WebMvcConfigurer的子类实现,由于Java8中可以使用default关键字为接口添加默认方法,为在源

lvyuanj的专栏 2444

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Springboot静态资源404

在配置mvc时 发现WebMvcConfigurationAdapter已经过时 网上推荐使用WebMvcConfigurationSupport 但是WebMvcConfigurationSupport会使 @EnableAutoConfiguration中的默认配置无效 现列举几种配置方法和效果方法一:extends WebMvcConfigurationAdapter 重写父类方法:@Con...

zuofengnihao的博客 3653

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SprigBoot中的 WebMvcConfigurer与 WebMvcConfigurerAdapter和 WebMvcConfigurationSupport

WebMvcConfigurationAdapter 过时? 在SpringBoot2.0之后的版本中WebMvcConfigurerAdapter过时了,所以我们一般采用的是如下的两种的解决的方法。 (1)继承WebMvcConfigureSupport 出现的问题:静态资源的访问的问题,在静态资源的访问的过程中,如果继承了WebMvconfigureSupport的方法的时候,...

weixin_30726161的博客 180

WebMvcConfigurerAdapter、WebMvcConfigurer、WebMvcConfigurationSupport、WebMvcAutoConfiguration

WebMvcConfigurerAdapter、WebMvcConfigurer、WebMvcConfigurationSupport、WebMvcAutoConfiguration

qq_37705525的博客 853

SpringBoot中SpringMvc配置扩展

在之前的springboot中可以使用WebMvcConfigurerAdapter类进行扩展配置SpringMvc中的自定义属性配置。但是当前版本将这个类废弃,根据java8的特性,接口不需要实现类重写接口中的全部方法。所以扩展SpringMvc的属性就可以实现WebMvcConfigurer接口。实现对应的方法就可以了。 下面是添加viewController的一个实现 1 ...

u011490595的博客 1503

Spring MVC源码解析:自定义组件的注入方式有多少种?

介绍 当我们开发Web项目时,当想增加自定义配置的时候,可以通过如下几种方式来实现 实现WebMvcConfigurer接口 继承WebMvcConfigurerAdapter 继承WebMvcConfigurationSupport 继承WebMvcConfigurerAdapter的方式已经被废弃了,为什么被废弃呢? 我们在开发的过程中提供一个接口时,一般会同时提供一个Adapter类,Adapter类实现这个接口。我们就可以继承这个Adapter类,按照需求覆盖相应的方式,而不用实现接口,然后一.

小识的博客 422

springboot自定义静态资源代理WebMvcConfigurerAdapter详解和过期后的替代方案WebMvcConfigurer

1、什么是WebMvcConfigurerAdapter Spring内部的一种配置方式 采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制html 2、WebMvcConfigurerAdapter经常使用的方法 /** 解决跨域问题 **/ public void addCorsMappings(CorsRegistry registry) ; /** 添加拦截器 **/ void addInterceptors(InterceptorRegistry regist

tiger_Angle 1914

SpringBoot2.0如何自定义WebMvc配置

在Spring boot中如果引入Web模块后会进行自动配置,自动配置类为:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration 如果自动配置满足不了我们的需求就需要我们进行自定义配置。 在Spring Boot1.0中我们可以通过继承WebMvcConfigurerAdapter这个适配类进行自定义配置 @Configuration public class MyMvcConfig extends WebMvc

不想搞技术的的cc不是好cc 528

SpringMVC的自定义配置和自动化配置

从WebMvcAutoConfiguration的类级注解@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)可以看出,自定义配置的WebMvcConfigurationSupport类会使得SpringBoot的MVC自动化配置失效,那么自定义配置的WebMvcConfigurationSupport将全面接管MVC的配置。那么怎样既可以保留SpringBoot关于MVC的自动化配置又能自定义扩展配置呢,有两种方式。

豢龙先生 632

SpringBoot之WebMvcConfigurationSupport与WebMvcConfigurer

查看源码注释上查到的解释是,在spring中配置WebMvc时有两种方法, 1.继承WebMvcConfigurationSupport或者子类DelegatingWebMVcconfiguration,重写里面相应的方法 2.继承WebMvcConfigurer的子抽象类WebMvcConfigurerAdapter(已经过时了),也是重写里面相应的方法,但是需要在配置类上添加@Enable...

sh_c1314 4956

WebMvcConfigurer、WebMvcConfigurationSupport、WebMvcConfigurerAdapter简单分析

在SpringMVC和SpringBoot里,使用Java类进行配置的操作是很常见的操作了,其配置可大致分两类: (小提一下@Configuration注解,在类上使用@Configuration注解时,标明这是一个配置类,相当于一个spring的.xml配置文件) 1. 普通配置 在一个类上使用@Configuration注解进行bean操作,例如导入其它jar中的bean,在类方法里进行一顿操作后再返回bean。 @Configuration public class MyConfig{ @B

博客 1331

WebMvcConfigurerAdapter与WebMvcConfigurer与WebMvcConfigurationSupport与WebMvcAutoConfiguration添加拦截器

首先以上4个类都是springboot中mvc的支持类 WebMvcConfigurer 为接口 WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法 , 已经废除 WebMvcConfigurationSupport 是mvc的基本实现并包含了WebMvcConfigurer接口中的方法 WebMvcAutoConfiguration 是...

zwj1030711290的优快云 1396
上一篇: zookeeper 版本选型
下一篇: G1 GC最佳实践
fire-flyer
博客等级 码龄14年 218粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fire-flyer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值