WebMvcConfigurationSupport 和 WebMvcConfigurer 区别和同时使用产生的问题-解决

news2024/11/15 21:40:56

在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。

在Spring Boot 2.0后用自己的的配置类继承WebMvcConfigurerAdapter时,idea会提示这个类已经过时了。

通常情况下我们会采用下面两种代替方案:

  • 实现WebMvcConfigurer
  • 继承WebMvcConfigurationSupport

WebMvcConfigurer 

为什么WebMvcConfigurer实现要加@EnableWebMvc

  @EnableWebMvc注解类上导入了DelegatingWebMvcConfiguration类,该类是WebMvcConfigurationSupport的子类,该类除了实例化WebMvcConfigurationSupport实例以外,另一个作用就是收集BeanFactory中所有WebMvcConfigurer的实现,汇集到WebMvcConfigurerComposite中,在WebMvcConfigurationSupport实例化过程中会分别调用这些实现,将相应的实例传入这些实现中,供开发者在此基础上添加自定义的配置。这也就是在WebMvcConfigurerAdapter子类上要加@EnableWebMvc的原因,因为要先实例化WebMvcConfigurationSupport

注意:springboot下不需要添加@EnableWebMvc

对于springboot来讲,继承WebMvcConfigure无需再加@EnableWebMvc注解,因为springboot已经实例化了WebMvcConfigurationSupport,如果添加该注解,默认的WebMvcConfigurationSupport配置类是不会生效的,会以用户自定义的为主,一般建议还是不覆盖默认比较好。同时,继承WebMvcConfigurationSupport后,springboot的WebMvc自动配置失效(有可能导致视图解析器无法正常工作)。

### 为什么可以存在多个WebMvcConfigurer的实现?
   一般来讲一个应用中一个WebMvcConfigurer的已经足够,设计成收集多个是不是有些多余?从springboot的autoconfigure机制来看并不多余,反而更灵活,比如我要写一个mybatis的AutoConfiguration和JPA的AutoConfiguration,我就可以在不同的AutoConfiguration里面定义一个WebMvcConfigurer的实现,里面只配置与mybatis或JPA相关的配置,这样需要那个启用那个,不需要人工通过注释代码来转换mybatis和JPA,

WebMvcConfigurationSupport 

WebMvcConfigurationSupport中那些子类可以重写的空方法在WebMvcConfigurer都有,这说明WebMvcConfigurer只是WebMvcConfigurationSupport的一个扩展类,它并没有扩展新功能,只是为让用户更方便安全的添加自定义配置,为什么说是安全呢?

因为如果直接继承WebMvcConfigurationSupport,那么用户可以重写默认的配置,如果对原理不是很清楚地开发者不小心重写了默认的配置,springmvc可能相关功能就无法生效,是一种不安全的行为。

继承WebMvcConfigurationSupport时发现会造成一些问题

先看一下WebMvc自动配置类WebMvcAutoConfiguration的定义:

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

看到这行可以明白,原来SpringBoot做了这个限制, 只有当WebMvcConfigurationSupport类不存在的时候才会生效WebMvc自动化配置,WebMvc自动配置类中不仅定义了classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/等路径的映射,还定义了配置文件spring.mvc开头的配置信息等。

继承WebMvcConfigurationSupport会发现Spring Boot的WebMvc自动配置失效(WebMvcAutoConfiguration自动化配置)
如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加拦截器。那么将配置类继承WebMvcConfigurationSupport改为实现WebMvcConfigurer接口即可。

总结一下:

1、WebMvcConfigurationSupport 和 WebMvcConfigurer都可以当作项目中的配置类,

WebMvcConfigurer是接口,WebMvcConfigurationSupport是个类

2、一个项目中只有一个WebMvcConfigurationSupport 类会生效

3、一个项目中可以有多个实现WebMvcConfigurer的类,并且都会生效

4、WebMvcConfigurationSupport 和 WebMvcConfigurer同时使用的时候,只有WebMvcConfigurationSupport中的配置会生效

不要同时使用 WebMvcConfigurationSupport和WebMvcConfigurer,推荐使用 WebMvcConfigurer。

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

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

相关文章

python多维数据可视化

文章目录 数据数据可视化平行坐标RadViz雷达图Andrews曲线矩阵图相关系数热力图参考文献多维度(3维以上)数据的可视化,用常规的方法不太好实现。本文介绍几种用Python实现的将多维数据展示在二维平面中的方法。 数据 以经典的鸢尾花数据集为例。 以下是5条经过格式处理的数…

[MAUI]用纯C#代码写两个漂亮的时钟

文章目录 时钟1绘制锯齿表盘绘制指针绘制沿路径文本 时钟2绘制表盘绘制指针项目地址 谷歌在2021年5月份推出的Android 12给我们带来了新的UI设计规范Material You,你是否已经体验到了Material You设计的魅力了呢? 在原生主屏幕启动器中,有一个…

【杂谈理解】STM32F103引脚反转速度时间

前言 事情的起因是最近我在使用F103编写WS2812彩灯的时序时遇到了一些小问题。具体来说,我发现WS2812的1码的低电平部分的时序无法达到要求的220ns~380ns,而只能到大约580ns左右。因此,我开始对引脚的反转速度进行了一些测试。下面数据仅是我…

Docker一键安装个人基础开发环境-MySQL、Redis、MongoDB

Docker Compose 在个人开发环境中,使用 Docker Compose 可以极大地简化和优化应用程序的部署和管理过程。 Docker Compose 的配置文件通常采用 YAML 格式,使其易于阅读和编写。我们可以在配置文件中指定所需的容器镜像、端口映射、环境变量、数据卷挂载…

张量分解中Tucker分解和CP分解的区别与联系

CP分解图示: Tucker分解图示: 两者的区别如下: 主要区别:核张量(core tensor) Tucker分解的结果会形成一个核张量,即PCA中的主成分因子,来表示原张量的主要性质,而CP分解…

【添加anaconda环境变量】

Win11操作系统,首先进入到编辑环境变量界面 分别添加以下这三个,保存。 最后关闭pycharm,重启,打开Terminal,输入conda --version,成功!

Linux删除文件夹时,报错“Error: EBUSY:resource busy or locked, unlink……”该如何解决?

目录 问题描述: 问题解决: 问题描述: 在linux上,想要删除一个文件夹,总是报错如下图,一直删除不掉。明明感觉自己并没有执行这个文件夹下的内容,却一直删除失败。 问题解决: 不得不…

如何在小程序中引入使用vant框架

一、vant框架 vantUI框架常用于移动端页面组件的基础库构建,为了让用户获得更趋向于原生的体验,它是一种相当不错的方案选择。 关于这个框架,它不仅有适用于移动端vue脚手架的版本,同时还存在可以兼容小程序开发的webapp版本。在…

业务逻辑一定要紧密执行,希望大家引以为戒!——记一次惨痛的教训【伸手党福利】【又是贷款上班的一天】

切记一定要先执行业务逻辑再进行其他操作! 程序员的教训 问题现象 后台传来报警,充值平台余额不足,发现大量充值记录。 分析 先看一下代码: 发起http的post请求,然后将返回体显示,并用logs记入日志&a…

STM32F4_nRF24L01无线通讯

目录 前言: 1. nRF24L01无线模块简介 2. nRF24L01状态机 3. nRF24L01模式 4. nRF24L01的SPI配置 4.1 nRF24L01 Rx 和 Tx 的初始化配置 4.2 nRF24L01相关寄存器 5. 硬件连接 6. 实验程序 6.1 main.c 6.2 NRF24L01.c 6.3 NRF24L01.h 前言: S…

10-切片是什么?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 10-切片是什么?

主成分分析系列(二)为何特征向量是主成分

在主成分分析系列(一)概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化,在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是: 设 V \mathbf{V} V 为 d {d} d 维 线性空间(即…

单表-DQL

注意:这张图还包含了对于的顺序,先分组再排序,再分页,顺序不能乱 基本查询 # 1.基本查询 # 查询全部行 select * from tb_emp; select id, user_name, password, name, gender, image, job, entry_date, create_time, update_ti…

成本降低60%至70%?中国展现顶级电池技术,锂电就是下一个铅酸

在3月份,宁德时代宣布加速推进钠离子电池产业化,以降低成本并提供差异化产品和技术,帮助客户提升产品竞争力和占据更大市场份额。孚能科技已在上半年开始批量生产钠离子电池,而拓邦股份也在最近的国际电池技术展上发布了自家的钠离…

二、逻辑回归

二、逻辑回归1.线性回归2.分类问题1)二分类2)多分类 3.逻辑回归模型简介1)逻辑回归背景2)逻辑回归主要基于以下三个目的3)优缺点 4.逻辑回归原理1)构造函数(Sigmoid函数)2&#xff0…

阿里远程仓库环境安装

自己是做前端开发的,自己薅的阿里的三个月的免费的服务器,练练手。在安装环境的时候遇到一些坑,记录下来 获取到服务器之后我是通过Royal TSX工具远程连接的,作为一个前端可能想到先装一些基本的命令 介绍一些基本的命令&#xff…

Git学习笔记(二)

导航小助手 四、分支管理 4.1 管理分支 4.2 创建分支、切换分支、合并分支 4.3 删除分支 4.4 合并冲突 4.5 分支管理策略 4.5.1 分支策略 4.6 bug分支 4.7 删除临时分支 四、分支管理 4.1 管理分支 现在介绍一下Git的杀手级别功能之一:分支~ 理解分支&a…

解决:前端请求跨域问题

解决:前端请求跨域问题 问题一:Access to XMLHttpRequest at https://xxx/ICN40310000075_1687926884828.pdf from origin http://localhost:63342 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requeste…

valgrind检测内存泄漏、越界访问、野指针访问实验

前言 本次测试包括&#xff0c;检测无误的代码&#xff0c;检测内存泄漏&#xff0c;检测访问越界&#xff0c;检测野指针&#xff0c;检测访问已经释放(已经被free)的内存。 一 安装valgrind sudo apt install valgrind 二 无错误 #include <stdio.h> #include <…

leetcode:836. 矩形重叠(python3解法)

难度&#xff1a;简单 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0c;则称两矩形重叠。需要明确的是&…