SpringBoot--->>>web-->>定制化原理
原理分析
在SpringBoot中,通过之前的web开发原理的探究,会发现,SpringBoot底层总能自己根据场景跑起来。流程是:导入场景 -> 对应的AutoConfiguration就会启动 -> 生成各种组件 -> 组件和配置类上绑定了对应的Properties。
所以如果要进行开发中的定制化配置,就有以下的这些方式:
通过 @Bean 注解往容器中添加对应的组件,取代默认配置。因为这些自动配置类和里面添加的组件都有大量的 @ConditionalOnMissBean 这个注解,所以就能自己写组件和自动配置类。如果你认为你写的比Spring Boot好。
配置类直接跟配置文件项绑定,所以就能修改配置文件项进行定制化配置
实现 xxxxCustomizer 定制化器接口,完成定制化操作。这个定制化器由SpringBoot提供
通过配置类实现 WebMvcConfiguer 接口对web完成定制化功能的修改和增加。
@EnableWebMvc + WebConfiguer 可以全面接管SpringMvc,使用了这个注解后SpringBoot底层写的所有关于web的资源的匹配、视图解析器都会失效,要自己写定制配置,定制或扩展功能。
至于为什么使用了 @EnableWebMvc 注解后,静态资源等配置会失效,是因为
@EnableWebMvc 中 @Import(DelegatingWebMvcConfiguration.class)
而 DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport
已知 Spring Boot中负责web的自动配置类 WebMvcAutoConfiguration 生效要满足一个条件
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
所以使用了 @EnableWebMvc 注解后,默认配置会失效。
而在 DelegatingWebMvcConfiguration 中
@Autowired(required = false) public void setConfigurers(List<WebMvcConfigurer> configurers) {if (!CollectionUtils.isEmpty(configurers)) {this.configurers.addWebMvcConfigurers(configurers);} }
他会把容器中所有的 WebMvcConfiguer 进行引入,所以只要你实现了 WebMvcConfiguer 接口写成了配置类,剩下的配置项组件就能定制。
WebMvcConfigurationSupport 中只是添加了一些Mvc的基本配置RequestMappingHandlerMapping、ContenNagotiation等基本组件。剩下的就要自己在配置类里面定制化写。
基本就用添加配置类和修改配置文件两种。
以后的redis、Kafak、RabbitMQ等类型场景整合,只需要看对应的自动配置类,然后添加需要添加的配置项,就能用。不满意就看条件改配置,自己定制化配置。
SpringBoot--->>>web-->>定制化原理相关推荐
- springboot的定制化方式
springboot的定制化原理 个人理解,springboot设计目标就是希望利用提供各种默认约定配置,代替配置,从而达到简略配置的目的. 实现原理就是利用类似SPI机制,通过AutoConfigu ...
- [SpringBoot2]定制化原理_SpringBoot定制化组件的几种方式
定制化原理 定制化的常见方式 ● 修改配置文件: ● xxxxxCustomizer: ● 编写自定义的配置类 xxxConfiguration:+ @Bean替换.增加容器中默认组件:视图解析器 ● ...
- SpringBoot 定制化原理
一.定制化的常见方式 修改配置文件 xxxxxCustomizer 编写自定义的配置类 xxxConfiguration:+ @Bean替换.增加容器中默认组件:视图解析器 Web应用 编写一个配置类 ...
- java web 定制化界面_实现javaWeb网页自定义出错界面
1.需要配置web.xml文件中的信息,注意一点需要把所有会出错的错误码都声明出来,如果不声明出来会没有效果,我这里只声明了网页找不到的错误码404和500错误,其他的错误码可以自己百度搜索. 404 ...
- SpringBoot定制化开发
文章目录 SpringBoot定制化开发 SpringBoot定制化开发 原理分析套路: 先找他对应的场景,然后我们就可以定位到对应的xxxxAutoConfiguration看他内部导入了哪些组件, ...
- SpringBoot WEB 核心原理
学习SpringBoot WEB部分我们有几个疑问,如下: 1 SpringBoot如何实现默认使用Tomcat作为servlet容器的? 2 如何配置jetty作为servlet容器? 3 Spri ...
- SpringBoot使用assembly进行项目定制化打包
SpringBoot使用assembly进行项目定制化打包 一.项目配置 1.添加插件 (1)编辑项目的 pom.xml 文件,加入 assembly 打包插件: <build><p ...
- 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
作者 | 陈厚道 冯庆 来源 | 阿里巴巴云原生公众号 导读:本文将对 RocketMQ-Exporter 的设计实现做一个简单的介绍,读者可通过本文了解到 RocketMQ-Exporter 的实 ...
- SpringBoot入门-自动配置原理
3.自动配置原理入门 3.1 引导加载自动配置类 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFil ...
最新文章
- python 标签树的遍历
- 比较数据库表结构之间的差异
- Android socket 编程 实现消息推送(一)
- springCloud Finchley 实战入门(基于springBoot 2.0.3)【六 Hystrix 仪表盘】
- Android mergeDebugResources'. Error: java.util.concurrent.ExecutionException: com.android.ide.comm
- Nginx服务学习(6)-日志模块
- 北京,上海 商汤研究院基础视觉组正式员工(校招、社招)实习生长期招聘...
- TensorFlow神经网络(五)输入手写数字图片进行识别
- Java — Map.keySet()、Map.put()、Map.get()【Map类、Set类】
- Atitit.atijson 类库的新特性设计与实现 v3 q31
- 鲸会务手把手教您线上年会抽奖怎么玩
- 【重磅消息】欧洲最大云服务公司OVH机房着火:部分客户数据完全丢失且无法恢复
- 高光谱遥感数据光谱特征的提取与应用---高光谱基础知识科普论文
- 观察 | 家长焦虑,教培着急,暑期“培训热”今年还会持续吗?
- Debian 11 修改 DNS 服务器
- 组合数据类型练习,英文词频统计实例
- 计算机的输入输出设备
- 解决腾讯地图标记多个点,只渲染最后一个点问题
- 缺氧游戏超级计算机在哪里研究,缺氧简易上手攻略_缺氧怎么玩_游戏堡
- 哪种类型是python不支持的_Python不支持以下哪种数据类型?
热门文章
- Linux系统怎么使用扫描仪,Linux系统中Nmap扫描命令的使用方法 -电脑资料
- 相机和镜头选择时的一些参数
- GRE计算机专项考试题(98) (转)
- 扩展我们的分析处理服务(Smartly.io):使用 Citus 对 PostgreSQL 数据库进行分片
- ElasticSearch系列03:ES的数据类型
- 谷歌翻译插件imtranslator安装使用步骤
- MIT Cheetah Learning (一):State Estimate
- 汽车改装贴膜小程序开发制作功能介绍
- 如何安装IBM QISKit
- 【认知】什么规律或观念使人与人赚的钱产生了巨大差别?