首页 > 其他分享 >11.自动配置原理入门-自动配置流程-场景

11.自动配置原理入门-自动配置流程-场景

时间:2022-09-04 00:55:33浏览次数:57  
标签:11 容器 multipartResolver 配置 MultipartResolver 自动 组件

简单分析一下场景中的自动配置的流程

就拿springboot-autoconfiguration中的web场景来简单分析

进入web的servlet中的DispatcherServletAutoConfiguration 

 

 

 

第一个是优先级不影响自动配置

第二个是是否单例,前端控制器不是单例的,因为是做请求分发的自然不能是单例的,也不影响自动配置

第三个是条件判断 在源码中有标这个的意思,意思就是只有基于 servlet 的 Web 应用程序会匹配。条件成立

第四个是条件判断 是否存在这个类,没用爆红就说明存在

 

 

 第五个是自动配置在之后,不是条件判断所以不影响

那么这个自动配置就会生效,但是也得看看类中还有没有条件判断

比如在自动配置类中还有一个配置类

 

 

 没爆红就证明存在,那么这个类就能继续,然后就注册组件

 

 

 在注册组件的时候也有条件判断的,比如这个

第一个先判断有没有这个类,没爆红就是存在

第二个是容器中没有 MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver"; 没有multipartResolver这个组件 条件成立

意思就是说有multipartResolver组件 就不走这里,没有multipartResolver组件才会走这里

没有multipartResolver会生效 但是在方法中又在取这个 multipartResolver的参数,就说明容器中存在multipartResolver的组件,不然下方返回null了

容器中存在multipartResolver,然后又返回了一个名为multipartResolver的组件,就可以看出从容器中取出的multipartResolver组件名字不对

其实通过里面的注释就可以看出这是一个   如果命名错误,就重新注册了名为multipartResolver的组件

下面的老师的总结:

        @Bean
        @ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
        @ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
        public MultipartResolver multipartResolver(MultipartResolver resolver) {
            //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
            //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
            // Detect if the user has created a MultipartResolver but named it incorrectly
            return resolver;
        }
给容器中加入了文件上传解析器;

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

@Bean
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() {
    }

这个是编码过滤器,就是请求过来之后转换编码,上面整体的意思是 我们自己也可以在自己的配置类中定义bean

比如public class myconfig{

    public CharacterEncodingFilter characterEncodingFilter() {
    ... }

}

总结:

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件,相当于这些功能就有了
  • 定制化配置
    • 用户直接自己@Bean替换底层的组件
    • 用户去看这个组件是获取的配置文件什么值就去修改。

xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties

 xxxxProperties里面拿值拿的是默认值,我们在application.properties中写的配置就是重写的

 

标签:11,容器,multipartResolver,配置,MultipartResolver,自动,组件
From: https://www.cnblogs.com/dzs894330350/p/16654099.html

相关文章

  • [Typescript] 11. Medium - Equal
    ImplementtheEqual<T,U>Forexample:typeisEqual=Equal<1,1>//trueIdea: Parametertype: <P>(x:P)=>anyCheckPextendsT?1:2ThencheckPexte......
  • 笔记:sentinel配置链路时web-context-unify=false不生效
    @ConfigurationpublicclassdemoConfig{/***@NOTE在spring-cloud-alibabav2.1.1.RELEASE及前,sentinel1.7.0及后,关闭URLPATH聚合需要通过该方式,spring-clou......
  • win10关闭自动更新
    1.先运行services.msc进去之后找到下面这个WindowsUpdate服务,双击然后点击常规,启动类型改为禁用:然后点击恢复,将下面这几项改为无操作:2.再运行gpedit.msc在windo......
  • HC32L110(五) Ubuntu20.04 VSCode的Debug环境配置
    目录HC32L110(一)HC32L110芯片介绍和Win10下的烧录HC32L110(二)HC32L110在Ubuntu下的烧录HC32L110(三)HC32L110的GCC工具链和VSCode开发环境HC32L110(四)HC32L110......
  • 数据库 - Mariadb安装配置
    数据库概述数据库--数据的仓库(集散地)--database--实现数据持久化和数据管理持久化--将数据从内存转移到能够长久保存数据存储的介质的过程数据库的分类:关系型数......
  • JDK8安装配置
    JDK8安装配置一、下载JDK官网:JavaArchiveDownloads-JavaSE8(oracle.com)二、安装JDK三、配置环境1、电脑>属性>高级设置>环境变量 2、测试环境......
  • Springboot2.x 使用 nacos 实现配置管理
    参考https://nacos.io/zh-cn/https://blog.csdn.net/weixin_43871678/article/details/121628460环境环境版本操作windows10JDK11Springboot2.......
  • 正确配置Linux系统ulimit值的方法
    正确配置Linux系统ulimit值的方法-爱开卷360-博客园 https://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html在Linux下面部署应用的时候,有时候会遇上So......
  • 正确配置Linux系统ulimit/nproc值的方法
    正确配置Linux系统ulimit/nproc值的方法_wkwanglei的博客-CSDN博客_linuxnproc https://blog.csdn.net/wkwanglei/article/details/44199891在Linux下面部署应用的时候......
  • VScode设置标签中的属性自动换行
    问题描述很多时候,在编写Vue代码时经常需要添加很多的属性,往往这时候就会采用一个属性一行的代码格式,但是格式化代码又会将其合并为一行,如果每次都手动进行换行,又会非常影......