当前位置: 首页 > news >正文

SpringBoot -- 整合SpringMVC

SpringBoot已经替我们整合了许多框架并进行了默认的配置,我们只需要在依赖中导入spring-boot-starter-web,就可以直接使用SpringMVC以及web场景下的已经整合好的功能。但SpringBoot的默认配置可能无法满足我们所有的需求,那么我们怎么进行自定义修改呢?

1. 自动配置

SpringBoot的自动配置机制已经在这篇文章中进行了介绍。这里只进行简单说明。

  • 我们在依赖库中导入spring-boot-starter-web
  • spring-boot-starter-web会引入spring-boot-autoconfigure,其中包含了所有场景的所有配置类
  • 主程序中包含注解@EnableAutoConfiguration,它会通过@Import(AutoConfigurationImportSelector.class)批量导入配置类
  • 配置类根据条件注解以及属性绑定,将组件都加入到容器中

自动配置的默认效果为:

  • 包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 组件,方便视图解析
  • 默认的静态资源处理机制: 静态资源放在 static 文件夹下即可直接访问
  • 自动注册了 Converter,GenericConverter,Formatter组件,适配常见数据类型转换和格式化需求
  • 支持 HttpMessageConverters,可以方便返回json等数据类型
  • 注册 MessageCodesResolver,方便国际化及错误消息处理
  • 支持 静态 index.html
  • 自动使用ConfigurableWebBindingInitializer,实现消息处理、数据绑定、类型转化、数据校验等功能

2. 使用方式

SpringBoot 已经默认配置好了Web开发场景常用功能。我们有三种使用他们的方式:

2.1 直接使用

我们全部使用自动配置的默认效果,直接可以开始编写业务代码。

2.2 自定义修改部分功能

我们可以保留自动配置的效果,在自动配置的基础上手动设置部分功能,定义MVC底层组件。

2.3 完全手动设置

禁用自动配置效果。我们对所有配置都手动进行设置。

显然,我们大多数都会选择第二种方式。在自动配置的基础上,进行部分的修改和添加,这样可以很好的实现我们的需求,工作量也不会很大。

我们只需要给容器中写一个配置类@Configuration实现 WebMvcConfigurer但是不要标注 @EnableWebMvc注解。

3. @EnableWebMvc

为什么第二种方式不可以标注 @EnableWebMvc注解, @EnableWebMvc有什么效果呢?

@EnableWebMvc可以禁用默认行为,其原因如下:

  • @EnableWebMvc给容器中导入 DelegatingWebMvcConfiguration组件,而 DelegatingWebMvcConfiguration是继承了WebMvcConfigurationSupport,因此这也意味着容器中存在了WebMvcConfigurationSupport类型的组件
  • WebMvcAutoConfiguration有一个核心的条件注解, @ConditionalOnMissingBean(WebMvcConfigurationSupport.class),也就是说只有容器中没有WebMvcConfigurationSupport类型的组件,WebMvcAutoConfiguration才生效
  • 因此,@EnableWebMvc 导入 WebMvcConfigurationSupport 导致 WebMvcAutoConfiguration 失效,最终效果就是禁用了默认行为
http://www.lryc.cn/news/328591.html

相关文章:

  • C语言操作符详细讲解
  • Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!
  • 服务器大请求体问题定位
  • Vue指令之v-model
  • 信息系统项目管理师——第11章项目成本管理(重要)
  • SpringMVC常见面试题
  • golang 和java对比
  • 基于pear-admin-flask 的 flask 使用教程
  • Android 开发投屏软件
  • .Net Web窗口页属性
  • 渐变色x轴换行柱状图
  • 源支付V7开源版2.99,修复各种提示错误
  • Mysql中的那些锁
  • 如何在Linux系统部署ONLYOFFICE协作办公利器并实现多人实时编辑文档
  • Linux部署Sonarqube+Gogs+Jenkins(一)
  • 程序员开发技术整理(持续整理中)
  • Java并查集详解(附Leetcode 547.省份数量讲解)
  • 【MySQL】DQL-基础查询-语句&演示(查询多个字段 / 所有字段/并设置别名/去重)
  • 更新一条SQL的执行流程
  • 深入理解nginx mp4流媒体模块[上]
  • Go 之 Gin 框架
  • vue3+threejs新手从零开发卡牌游戏(二十一):添加战斗与生命值关联逻辑
  • Linux内核err.h文件分析
  • Qt 富文本处理 (字体颜色大小加粗等)
  • 消息队列的七种经典应用场景
  • uniapp 微信小程序 canvas 手写板文字重复倾斜水印
  • JavaScript如何制作轮播图
  • 【面试经典150 | 动态规划】零钱兑换
  • 什么是防火墙,部署防火墙有什么好处?
  • 学习鸿蒙基础(10)