SpringBoot中的WebMvcConfigurationSupport和WebMvcConfigurer

news2024/11/16 3:49:43

在SpringBoot中可以通过以下两种方式来完成自定义WebMvc的配置:

(1)继承WebMvcConfigurationSupport类

(2)实现WebMvcConfigurer接口

通过这两种方式完成的WebMvc配置存在差异,本文将对此作简单说明与区分。

一.继承WebMvcConfigurationSupport类

1.WebMvcConfigurationSupport是一个用于实现自定义WebMvc配置的类,里面提供了如添加自定义拦截器、消息转换器等方法,同时对于部分方法具有默认实现。

 2.WebMvcConfigurationSupport中很多方法都被打上@Bean注解,这代表这些方法提供的对象将会交给IOC容器管理。但是WebMvcConfigurationSupport这个类却并未被打上@Configuration注解

 因此在使用继承WebMvcConfigurationSupport的方式来完成自定义WebMvc配置时,需要手动给打上@Configuration注解,这样WebMvcConfigurationSupport中的@Bean方法才能生效。

3. SpringBoot对SpringMvc已经做了自动配置。默认情况下,SpringBoot会使用自己的WebMvc配置类WebMvcAutoConfiguration,而该类实现自动配置的关键在于其内部类EnableWebMvcConfiguration

可以看到作为WebMvcAutoConfiguration内部类的EnableWebMvcConfiguration又是DelegatingWebMvcConfiguration这个类的子类,那么我们再到DelegatingWebMvcConfiguration这个类内部看一下

可以看到DelegatingWebMvcConfiguration继承了WebMvcConfigurationSupport。

在Spring框架中,我们可以通过继承WebMvcConfigurationSupport类的方式来实现自定义WebMvc配置,而SpringBoot底层正是通过这种方式来完成自己的WebMvc配置。也就是说我们在SpringBoot中,实际上已经在使用SpringBoot为我们提供的,不同于Spring框架默认配置的WebMvc配置。

4.如果自己使用继承WebMvcConfigurationSupport的方式来实现自定义WebMvc配置,则会覆盖SpringBoot提供的WebMvc配置。

(1)我们在SpringBoot的WebMvc配置类WebMvcAutoConfiguration类上可以看到这一行注解:@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})

该注解的意思是:在SpringBoot实现自动装配时,如果IOC容器中不存在类型为WebMvcConfigurationSupport的bean,才会将这个WebMvcAutoConfiguration实例化。

(2)而如果我们使用继承WebMvcConfigurationSupport类的方式来实现自定义WebMvc配置,则在自动装配时,将导致WebMvcAutoConfiguration无法实例化,其内部初始化配置将全部无法实例化,也就是说SpringBoot提供的WebMvc配置失效;取而代之的,我们自己实现的WebMvcAutoConfiguration类将作为全部WebMvc配置的源头。

(3)如果我们采用这种方式实现WebMvc配置,且在子类中只重写自己需要拓展的功能方法,则其他方法将采用WebMvcConfigurationSupport的默认方法,其默认方法有的是空方法,而有的给了默认实现。但需要注意的是,WebMvcConfigurationSupport那些给了默认实现的方法,与SpringBoot的WebMvc配置类WebMvcAutoConfiguration自己实现的方法是不一样的。我们如果继承WebMvcConfigurationSupport,而不重写其方法,那么我们就是在使用Spring提供的WebMvc配置,而不是SpringBoot提供的WebMvc配置。

(4)因此,使用继承WebMvcConfigurationSupport类实现自定义WebMvc配置这种方式的缺点是显而易见的——我们将为了拓展部分WebMvc配置,而抛弃全部SpringBoot已经为我们实现的便捷的WebMvc配置。

二.实现WebMvcConfigurer接口

1.WebMvcConfigurer是一个用于实现自定义WebMvc配置的接口,里面同样提供了如添加自定义拦截器、消息转换器等方法,且都是默认为空实现的方法。

2.使用实现WebMvcConfigurer接口的方式来实现自定义WebMvc配置,并不会覆盖SpringBoot自己实现的配置。

(1)上文提到,只有在IOC中已经有类型为WebMvcConfigurationSupport的bean的时候,SpringBoot的WebMvc配置类WebMvcAutoConfiguration才不会生效。

(2)而如果我们使用实现WebMvcConfigure接口r的方式自定义WebMvc配置,则WebMvcAutoConfiguration可以被实例化,SpringBoot自己配置的WebMvc成功生效。

(3)而如果在实现WebMvcConfigurer接口时,我们自己实现的方法在SpringBoot的WebMvcAutoConfiguration中也被实现了,则会合并而不是覆盖。这说明了实现WebMvcConfigurer接口是一种增量式的配置方式:

当我们实现WebMvcConfigurer接口并重写其中的某个方法时,实际上是在提供额外的配置或定制逻辑,这些配置或逻辑将与SpringBoot的默认配置合并。SpringBoot会先加载其默认的自动配置,然后应用你在WebMvcConfigurer中定义的自定义配置。

3.继承WebMvcConfigurationSupport与实现WebMvcConfigurer是不同的配置逻辑

(1)继承WebMvcConfigurationSupport类是抛弃所有SpringBoot提供的WebMvc配置,全部由自己实现。

(2)实现WebMvcConfigurer接口是在保留SpringBoot提供的WebMvc配置的基础上,添加自己要拓展的配置。

(3)因此,实际开发中更推荐使用实现WebMvcConfigurer接口的方式来完成自定义WebMvc配置。

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

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

相关文章

官网万词霸屏推广 轻松实现百度万词霸屏源码系统 带完整的安装代码包以及搭建教程

系统概述 官网万词霸屏推广源码系统是一款基于先进技术研发的综合性 SEO 工具。它的设计理念是通过智能化的算法和策略,帮助用户快速提升网站在百度等搜索引擎中的排名,实现大量关键词的霸屏效果。该系统整合了多种优化技术,包括关键词研究、…

日本指数实时API接口

日本 指数 实时API接口 # Restful API https://tsanghi.com/api/fin/index/JPN/realtime?token{token}&ticker{ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。 更新周期:实时。 请求方式:GET。…

Kali linux学习入门

Kali linux学习入门 文章目录 Kali linux学习入门Kali Linux简介Kali Linux工具篇Kali Docker安装Docker 更换国内镜像源Kali 安装 docker compose Kali Linux文档篇Kali Linux 社区篇 Kali Linux简介 Kali Linux是专门用于渗透测试linux操作系统,它由BackTrack发展…

Bev 车道标注方案及复杂车道线解决

文章目录 1. 数据采集方案1.1 传感器方案1.2 数据同步2. 标注方案2.1 标注注意项2.2 4d 标注(时序)2.2.1 4d标签制作2.2.2 时序融合的作用2.2.2.1 时序融合方式2.2.2.2 时序融合难点2.2.2.2 时序实际应用情况3. 复杂车道线解决3.1 split 和merge车道线的解决3.2 大曲率或U形车道…

单列集合.java

单列集合 为了存储不同类型的多个对象,Java提供了一些特殊系列的类,这些类可以存储任意类型的对象,并且存储的长度可变,这些类统称为集合。可以简单的理解为一个长度可变,可以存储不同数据类型的动态数组。集合都位于j…

mysql的binlog占用大量磁盘空间的解决方法

查看当前日志保存天数: mysql> show variables like %expire_logs_days%; ------------------------- | Variable_name | Value | ------------------------- | expire_logs_days | 0 | ------------------------- 1 row in set (0.08 sec) 默认是0&…

Mac - Node/Java 配置安装全流程

Mac - Node/Java 配置安装全流程 一. Git 安装二. Java 相关安装2.1 jenv 版本控制工具2.2 JDK1.8 和 JDK21的安装2.3 maven 安装 三. Node 相关安装3.1 nvm 版本控制工具3.2 Node 版本安装 一. Git 安装 1.我们首先安装一下Homebrew,这个工具很有用,能…

大数据处理学习笔记

sudo tar -zxvf hadoop-1.1.2.tar.gz -C / #解压到/usr/local目录下 sudo mv hadoop-1.1.2 hadoop #重命名为hadoop sudo chown -R python ./hadoop #修改文件权限 //java安装同上给hadoop配置环境变量,将下面代…

从C到C++,C++入门篇(1)

1.什么是C C是一种通用编程语言,由Bjarne Stroustrup在1980年代初开发,作为C语言的扩展。 C支持多种编程范式,包括过程式编程、数据抽象、面向对象编程和泛型编程等。 这种语言在操作系统、游戏开发、图形界面、嵌入式系统、分布式系统、网…

啵啵啵啵啵啵啵啵啵啵啵啵啵啵啵

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

“安全生产月”专题报道:AI智能监控技术如何助力安全生产

今年6月是第23个全国“安全生产月”,6月16日为全国“安全宣传咨询日”。今年全国“安全生产月”活动主题为“人人讲安全、个个会应急——畅通生命通道”。近日,国务院安委会办公室、应急管理部对开展好2024年全国“安全生产月”活动作出安排部署。 随着科…

外贸自动化脚本编写会用到的源代码!

随着全球化的加速推进,外贸行业正迎来前所未有的发展机遇,为了提高工作效率、减少人为错误,并更好地把握市场机遇,越来越多的外贸企业开始关注自动化脚本的编写与应用。 自动化脚本不仅可以帮助企业实现业务流程的自动化&#xf…

python-windows10普通笔记本跑bert mrpc数据样例0.1.001

python-windows10普通笔记本跑bert mrpc数据样例0.1.000 背景参考章节获取数据下载bert模型下载bert代码windows10的cpu执行结果注意事项TODOLIST背景 看了介绍说可以在gpu或者tpu上去微调,当前没环境,所以先在windows10上跑一跑,看是否能顺利进行,目标就是训练的过程中没…

python面向过程与初始面向对象编程

让我们穿越到《龙珠》世界,一起揭开 面向对象编程 的神秘面纱吧。 面向过程编程与面向对象编程 天下第一武道会 选手登记 第 22 届天下第一武道会即将召开,各路武术高手齐聚一堂,其中最受瞩目的,当属卡卡罗特(孙悟…

前后端实现文件上传进度条-实时进度

后端接口代码&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam("file") MultipartFile file) {try {// 获取文件名String fileName file.getOriginalFilename();// 创建上传目标路径Path targetPa…

CTFHUB-技能树-web-信息泄露

目录 1.目录遍历 2.PHPINFO 3.备份文件下载 3.1 网站源码 3.2 bak文件 3.3 vim缓存 3.4 .DS_Store 4.Git泄露 4.1 Log 4.2 Stash 4.3 Index 5.SVN泄露 6.HG泄露 1.目录遍历 这个没什么好讲的&#xff0c;进去直接点击找flag,然后在下面目录翻&#xff0c;就找到了 …

手撕设计模式——克隆对象之原型模式

1.业务需求 ​ 大家好&#xff0c;我是菠菜啊&#xff0c;前俩天有点忙&#xff0c;今天继续更新了。今天给大家介绍克隆对象——原型模式。老规矩&#xff0c;在介绍这期之前&#xff0c;我们先来看看这样的需求&#xff1a;《西游记》中每次孙悟空拔出一撮猴毛吹一下&#x…

无码高清?Stable DIffusion教程 | 如何利用 Stable Diffusion webui 将图片变得更清晰?全方位对比4种放大方法!

大家好&#xff0c;我是大师兄 1、引言 “高分放大”&#xff08;有时候也叫“超分放大”或“高清修复”&#xff09;描述了在确保图像清晰度的前提下提升图片分辨率的过程。例如&#xff0c;将一张512 x 512的图片放大四倍&#xff0c;得到的就是2048 x 2048分辨率的图片&am…

现代社区管理中的电瓶车违停检测技术

随着城市化进程的加快&#xff0c;电瓶车作为一种环保、便捷的出行工具在社区内的使用越来越普及。然而&#xff0c;电瓶车的随意停放问题也日益严重&#xff0c;影响了社区的整体环境和居民的生活质量。为了解决这一问题&#xff0c;社区管理者迫切需要一种高效、准确的电瓶车…

Qt:QDialogButtonBox的使用

QDialogButtonBox是Qt自带的按钮箱&#xff0c;通过枚举QDialogButtonBox::ButtonRole可以添加Qt定义按钮&#xff0c;或者通过方法QDialogButtonBox::addButton添加自定义的按钮。 // 自定义按钮。 button_box_ new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonB…