原理分析

在SpringBoot中,通过之前的web开发原理的探究,会发现,SpringBoot底层总能自己根据场景跑起来。流程是:导入场景 -> 对应的AutoConfiguration就会启动 -> 生成各种组件 -> 组件和配置类上绑定了对应的Properties。

所以如果要进行开发中的定制化配置,就有以下的这些方式:

  1. 通过 @Bean 注解往容器中添加对应的组件,取代默认配置。因为这些自动配置类和里面添加的组件都有大量的 @ConditionalOnMissBean 这个注解,所以就能自己写组件和自动配置类。如果你认为你写的比Spring Boot好。

  2. 配置类直接跟配置文件项绑定,所以就能修改配置文件项进行定制化配置

  3. 实现 xxxxCustomizer 定制化器接口,完成定制化操作。这个定制化器由SpringBoot提供

  4. 通过配置类实现 WebMvcConfiguer 接口对web完成定制化功能的修改和增加。

  5. @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-->>定制化原理相关推荐

  1. springboot的定制化方式

    springboot的定制化原理 个人理解,springboot设计目标就是希望利用提供各种默认约定配置,代替配置,从而达到简略配置的目的. 实现原理就是利用类似SPI机制,通过AutoConfigu ...

  2. [SpringBoot2]定制化原理_SpringBoot定制化组件的几种方式

    定制化原理 定制化的常见方式 ● 修改配置文件: ● xxxxxCustomizer: ● 编写自定义的配置类 xxxConfiguration:+ @Bean替换.增加容器中默认组件:视图解析器 ● ...

  3. SpringBoot 定制化原理

    一.定制化的常见方式 修改配置文件 xxxxxCustomizer 编写自定义的配置类 xxxConfiguration:+ @Bean替换.增加容器中默认组件:视图解析器 Web应用 编写一个配置类 ...

  4. java web 定制化界面_实现javaWeb网页自定义出错界面

    1.需要配置web.xml文件中的信息,注意一点需要把所有会出错的错误码都声明出来,如果不声明出来会没有效果,我这里只声明了网页找不到的错误码404和500错误,其他的错误码可以自己百度搜索. 404 ...

  5. SpringBoot定制化开发

    文章目录 SpringBoot定制化开发 SpringBoot定制化开发 原理分析套路: 先找他对应的场景,然后我们就可以定位到对应的xxxxAutoConfiguration看他内部导入了哪些组件, ...

  6. SpringBoot WEB 核心原理

    学习SpringBoot WEB部分我们有几个疑问,如下: 1 SpringBoot如何实现默认使用Tomcat作为servlet容器的? 2 如何配置jetty作为servlet容器? 3 Spri ...

  7. SpringBoot使用assembly进行项目定制化打包

    SpringBoot使用assembly进行项目定制化打包 一.项目配置 1.添加插件 (1)编辑项目的 pom.xml 文件,加入 assembly 打包插件: <build><p ...

  8. 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

    作者 | 陈厚道  冯庆 来源 | 阿里巴巴云原生公众号 导读:本文将对 RocketMQ-Exporter 的设计实现做一个简单的介绍,读者可通过本文了解到 RocketMQ-Exporter 的实 ...

  9. SpringBoot入门-自动配置原理

    3.自动配置原理入门 3.1 引导加载自动配置类 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFil ...

最新文章

  1. python 标签树的遍历
  2. 比较数据库表结构之间的差异
  3. Android socket 编程 实现消息推送(一)
  4. springCloud Finchley 实战入门(基于springBoot 2.0.3)【六 Hystrix 仪表盘】
  5. Android mergeDebugResources'. Error: java.util.concurrent.ExecutionException: com.android.ide.comm
  6. Nginx服务学习(6)-日志模块
  7. 北京,上海 商汤研究院基础视觉组正式员工(校招、社招)实习生长期招聘...
  8. TensorFlow神经网络(五)输入手写数字图片进行识别
  9. Java — Map.keySet()、Map.put()、Map.get()【Map类、Set类】
  10. Atitit.atijson 类库的新特性设计与实现 v3 q31
  11. 鲸会务手把手教您线上年会抽奖怎么玩
  12. 【重磅消息】欧洲最大云服务公司OVH机房着火:部分客户数据完全丢失且无法恢复
  13. 高光谱遥感数据光谱特征的提取与应用---高光谱基础知识科普论文
  14. 观察 | 家长焦虑,教培着急,暑期“培训热”今年还会持续吗?
  15. Debian 11 修改 DNS 服务器
  16. 组合数据类型练习,英文词频统计实例
  17. 计算机的输入输出设备
  18. 解决腾讯地图标记多个点,只渲染最后一个点问题
  19. 缺氧游戏超级计算机在哪里研究,缺氧简易上手攻略_缺氧怎么玩_游戏堡
  20. 哪种类型是python不支持的_Python不支持以下哪种数据类型?

热门文章

  1. Linux系统怎么使用扫描仪,Linux系统中Nmap扫描命令的使用方法 -电脑资料
  2. 相机和镜头选择时的一些参数
  3. GRE计算机专项考试题(98) (转)
  4. 扩展我们的分析处理服务(Smartly.io):使用 Citus 对 PostgreSQL 数据库进行分片
  5. ElasticSearch系列03:ES的数据类型
  6. 谷歌翻译插件imtranslator安装使用步骤
  7. MIT Cheetah Learning (一):State Estimate
  8. 汽车改装贴膜小程序开发制作功能介绍
  9. 如何安装IBM QISKit
  10. 【认知】什么规律或观念使人与人赚的钱产生了巨大差别?