六、SpringBoot——SpringMVC自动配置&扩展配置(web定制)

2023-11-19

1 SpringMVC自动配置

org.springframework.boot.autoconfigure.web:web的所有web自动场景;

以SpringMVC为例
Spring Boot 自动配置好了SpringMVC,以下是SpringBoot对SpringMVC的默认配置:
在这里插入图片描述
WebMvcAutoConfiguration
1)包括ContentNegotiatingViewResolver and BeanNameViewResolver beans.
a)自动配置了ViewResolver(视图解析器:根据方法的返回值得到视图对象(View),视图对象决定如何渲染(转发?重定向?))
b)ContentNegotiatingViewResolver:组合所有的视图解析器的;
c)如何定制:我们可以自己给容器中添加一个视图解析器;自动的将其组合进来;
在这里插入图片描述
2 ) Support for serving static resources, including support for WebJars .静态资源文件夹路径,webjars

3 ) 自动注册了 Converter , GenericConverter , Formatter beans.
Converter(转换器):将页面提交的数据转换为后台接受的数据(如页面提交用户的年龄,性别信息,后台用User对象接收,使用Converter做类型转换)

Formatter 格式化器(页面传入2017.12.17转为Date类型)
在这里插入图片描述
自己添加的Formatter 格式化器、Converter 转换器,我们只需要放在容器中即可

4 ) 支持 HttpMessageConverters
HttpMessageConverter:SpringMVC用来转换Http请求和响应的;User—Json;
HttpMessageConverters 是从容器中确定;获取所有的HttpMessageConverter;
自己给容器中添加HttpMessageConverter,只需要将自己的组件注册容器中
(@Bean,@Component)

5)自动注册 MessageCodesResolver (see below).定义错误代码生成规则

6)Static index.html support. 静态首页访问
7)Custom Favicon support (see below). favicon.ico
8)自动使用 ConfigurableWebBindingInitializer bean
我们可以配置一个ConfigurableWebBindingInitializer来替换默认的;(添加到容器)
功能:初始化WebDataBinder;请求数据=====JavaBean;

在这里插入图片描述

2 扩展SpringMVC(自动配置and自定义配置)
以前SpringMVC写xml配置文件配置如下
访问/hello跳转success
定义拦截器
在这里插入图片描述
SpringBoot自动配置不能满足我们的需求,所以需要扩展

==编写一个配置类(@Configuration),是WebMvcConfigurerAdapter类型;不能标注@EnableWebMvc;这样既保留了所有的自动配置,也能用我们扩展的配置;==用配置类代替以前的springmvc.xml配置
在这里插入图片描述
在这里插入图片描述

原理:
1)、WebMvcAutoConfiguration是SpringMVC的自动配置类
2)、在做其他自动配置时会导入;@Import(EnableWebMvcConfiguration.class)
在这里插入图片描述
3)、容器中所有的WebMvcConfigurer都会一起起作用;
4)、我们的配置类也会被调用;
效果:SpringMVC的自动配置和我们的扩展配置都会起作用;

3 全面接管SpringMVC(自定义配置生效,自动配置完全失效)
SpringBoot对SpringMVC的自动配置不需要了,所有都是我们自己配置;所有的SpringMVC的自动配置都失效了。我们需要在配置类中添加@EnableWebMvc即可;
没有配置 @EnableWebMvc时,日志中可以看到有装配hiddenHttpMethodFilter
访问静态index.html页面也可以正常响应
在这里插入图片描述
在这里插入图片描述
添加上@EnableWebMvc之后 hiddenHttpMethodFilter消失了,静态首页访问失败
在这里插入图片描述
在这里插入图片描述

原理:
为什么@EnableWebMvc自动配置就失效了;
1)@EnableWebMvc的核心
在这里插入图片描述
2)
在这里插入图片描述
3)
在这里插入图片描述
4)、@EnableWebMvc将WebMvcConfigurationSupport组件导入进来;
5)、导入的WebMvcConfigurationSupport只是SpringMVC最基本的功能;

4 如何修改SpringBoot的默认配置
模式:
1)、SpringBoot在自动配置很多组件的时候,==先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;==如果有些组件可以有多个(ViewResolver)将用户配置的和自己默认的组合起来;
2)、在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置
3)、在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

六、SpringBoot——SpringMVC自动配置&扩展配置(web定制) 的相关文章

随机推荐

  • sklearn机器学习:多项式朴素贝叶斯MultinomialNB

    多项式朴素贝叶斯MultinomialNB 多项式贝叶斯可能是除了高斯之外 最为人所知的贝叶斯算法了 它也是基于原始的贝叶斯 论 但假设概率分布是服从一个简单多项式分布 多项式分布来源于统计学中的多项式实验 这种实验可以具体解释为 实验包括
  • DDL语句--查看表

    查看表结构是指查看数据库中已经存在的表的定义 查看表结构的语句包括DESTRIBE语句和SHOW CREATE TABLE语句 通过这两个语句 可以查看表的字段名 字段的数据类型和完整性约束条件等 这篇博客将详细讲解查看表结构的方法 1 查
  • [Unity3D] Unity3D连接安卓设备调试unity程序

    目录 一 手机开启调试模式 确保adb能检测到手机 目的 确保adb能检测到手机 通过adb devices命令能够呈现如下效果 常见问题 二 unity配置工作 目的 配置unity中Build Settings界面与Player Set
  • FRIDA + Objection 内存漫游,HOOK,anywhere

    前言 VX Ays971124 大家一起吹水加群聊天哦 Friday 是一款很优秀的HOOK工具 不用过多介绍 objection功能强大 命令众多 而且不用写一行代码 便可实现诸如内存搜索 类和模块搜索 方法hook打印参数返回值 调用栈
  • 结构体定义.h与.c文件的问题

    首先一个问题 就是结构体声明与定义的问题 不过 感觉现在的我有点弄混了 那么下面我直接来说明 最开始的编程习惯 一直是用将结构体的定义 即struct xx 这个放在 h文件里 c文件只放置相关的函数实现 不过这几天看了一本相关的数据结构的
  • GD32F4xx MCU ADC+DMA 多通道采样

    1 GD32F4xx ADC GD32F4xx 的12位ADC是一种采用逐次逼近方式的模拟数字转换器 1 1 主要特征 可配置12位 10位 8位 6位分辨率 ADC采样率 12位分辨率为2 6MSPs 10位分辨率为3 0 MSPs 分辨
  • Golang最强大的访问控制框架casbin全解析

    开箱即用的访问控制框架casbin原理是啥 支持哪些权限模型 本文一一解答 本文非常长 适合边嗑瓜子边看 Casbin是一个强大的 高效的开源访问控制框架 其权限管理机制支持多种访问控制模型 目前这个框架的生态已经发展的越来越好了 提供了各
  • Geom_Geometry

    Geom hierarchy The virtual method will be discussed later
  • STM32与Python上位机通过USB虚拟串口通信

    文章目录 前言 1 查看原理图 2 新建工程 3 添加代码与烧录 4 python代码编写 总结 问题解决思路 前言 在详细阅读广大网友的教程之后 我对STM32和Python通过USB通信的流程烂熟于心 尝试用ST公司的NUCLEO L4
  • SpringMvc之@RequestParam详解

    RequestParam是传递参数的 RequestParam用于将请求参数区数据映射到功能处理方法的参数上 public String queryUserName RequestParam String userName 在url中输入
  • c++面向过程和面向对象

    include
  • mysql 插入行 无论是否已存在

    当需要插入新的一行 但是行内容中的标识unique字段可能已经存在 使用replace into方式插入 当插入内容的unique字段在已有数据中不存在则正常插入 当插入内容的unique字段在已有数据中存在 则更新该字段内容为新输入的内容
  • java resource注解_关于 java中的 @Resource注解和@Autowired注解

    Resource 建议用 类全称 javax annotation Resource 默认注入方式 byName 反射机制 指定注入方式 a 如果使用name属性 则使用byName自动注入策略 gt Resource name good
  • linux 动态库so相关操作

    1 查看库版本号 一般在文件名上有版本号 若文件名上没有版本号 使用如下命令查看 readelf d libstdc so 2 查看库内函数 a nm d libstdc so grep 内容 b objdump tT libstdc so
  • kafka问题解决:org.apache.kafka.common.errors.TimeoutException

    记录使用kafka遇到的问题 1 Caused by java nio channels UnresolvedAddressException null 2 org apache kafka common errors TimeoutExc
  • 基于chatGLM-6B模型微调详细教程(linux版)(ptuning & lora)

    目录 准备工作 安装7z ptuning预训练 ChatGLM 6B Ptuning 7z 懒人包下载 上传文件并解压缩 拉取依赖 进行训练 启动服务 注意事项 揽睿星舟云算力平台 lora预训练 chatGLM All In One 7z
  • sqli-labs Less-8

    Less 8 Get Blind Boolian Based Single Quotes 1 原页面 2 id 1 3 id 1 4 尝试布尔盲注 代码存在sql注入漏洞 然而页面既不会回显数据 也不会回显错误信息 我们可以通过构造语句 来
  • Qt入门学习之常用界面设计组件(五)

    1 QComboBox QPlainTextEdit简介 QComboBox是下拉列表框组件类 它提供了一个下拉表供用户选择 也可以直接当作一个QLineEdit用作输入 QComboBox除了显示可见下拉列表外 每一个项 item 或称列
  • python爬虫与数据可视化报告_Python爬虫以及数据可视化分析!

    原标题 Python爬虫以及数据可视化分析 简单几步 通过Python对B站番剧排行数据进行爬取 并进行可视化分析 源码文件可以参考Github上传的项目 https github com Lemon Sheep Py tree maste
  • 六、SpringBoot——SpringMVC自动配置&扩展配置(web定制)

    1 SpringMVC自动配置 org springframework boot autoconfigure web web的所有web自动场景 以SpringMVC为例 Spring Boot 自动配置好了SpringMVC 以下是Spr