今天来讲讲springboot自动配置文件读取以及源码分析


springboot启动之后
1.首先进入@springbootApplication(如上图)
里面的**@EnableAutoConfiguration注解
2.点进
@EnableAutoConfiguration**里面

@Import导入的这个类点进去(这个类的就是将所有的自动配置类导进去容器中)
3.进去点进去(点圆圈标注的那个类)
这个类实现了变种的ImportSelector类,就是DeferredImportSelector类

这个类会根据它里面的getImportGroup()方法判断

4.如果这个方法返回的类实现了Group接口,那么他就会调用本类的process()方法
然后调用这个方法里面的getAutoConfigurationEntry方法获取所有的有效配
置类

这个方法里面是调用getCandidateConfigurations方法(这个方法是获取所有的127个配置类)
4.接下来看看是怎样读取到这127个配置类的


getCandidateConfigurations方法里面的loadFactoryNames方法是获取这127个配置类的关键,

loadFactoryNames方法里面的loadSpringFactories方法先去所有的jar包和类路径下去找META–INF/spring.factories
有哪些jar包有它需要的spring.factories

1.spring-boot
2.spring-beans
3.spring-boot-autoconfigure
没错,就是这3个jar包

获取完这3个jar包里面的所有的扩展类,

loadFactoryNames方法后继续调用getOrDefault方法完成一个过滤

怎样过滤的呢
loadSpringFactories
.getOrDefault会做一个配置类名过滤,只需要EnableAutoConfigurations为key值的配置类

最后剩下127个有效自动配置类

getCandidateConfigurations执行完之后再执行getConfigurationClassFilter().filter(configurations)
或取真正有用的配置类

这样process方法筛选出项目中需要的有效配置类

5.调用完process方法之后获得的是有效的并且项目中用得到的的配值类后,
再继续调用selectImports()方法,对这些有效类名做个排序什么的

最后,我自己对于springboot自动配置类读取流程的理解就是这些,可能理解的害不够透彻,欢迎大神来补充,欲知springboot自动配置原理且看下篇博客。

springboot自动配置文件读取以及源码分析相关推荐

  1. spark读取文件源码分析-2

    文章目录 1. job1产生时机源码分析 1. DataSoure.getOrInferFileFormatSchema() 2. ParquetFileFormat.inferSchema 1. 简 ...

  2. spark读取文件源码分析-1

    文章目录 1. 问题背景 2. 测试代码 3. 生成的DAG图 1. job0 2. job1 4. job0 产生的时机源码分析 1. 调用DataFrameReader.load,DataFram ...

  3. spark读取文件源码分析-3

    本篇是spark read一个parquet源码分析的第三篇,这一篇主要介绍spark的默认的partition的设置逻辑,当然,这一篇实际上算不上源码分析了 第一篇 第二篇 1 . userProf ...

  4. 关于Asp.net core配置信息读取的源码分析梳理

    概述 我们都知道asp.net core配置信息的读取离不开IConfigurationSource和IConfigurationProvider这两个类,ConfigurationSource可以提 ...

  5. Mybatis在Spring-boot中自动配置的底层源码分析

    前言:在Spring-boot结合Mybatis,我们只需要配置一些数据库连接的基本信息,写好Mapper和Dto就可以跑起来了.但是它是如何帮我们完成自动配置,并且执行我们的sql语句的呢?我们一起 ...

  6. Integer及String的equals及==注意示例,涉及自动拆箱、自动装箱以及equals源码分析

    1. 只要不是创建的Integer对象,那么 -128--127 范围内的数都是相等的,因为不是创建的Integer对象,不管Integer对象是直接赋值,还是调用parseInt,最终都是通过val ...

  7. SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例

    前言: Spring4推出了@Conditional注解,方便程序根据当前环境或者容器情况来动态注入bean 继@Conditional注解后,又基于此注解推出了很多派生注解,比如@Condition ...

  8. CI源码分析(一)—config配置文件模块

    (一) 使用方式 (a) 系统级配置 语言.字符编码.session.cookie等配置项 文件位置: application/config/config.php 加载方式: 自动加载 调用方式: $ ...

  9. QTP自动例子的源码分析--ClearMainWindow

    概述: 本系列文章主要用来研究和分析QTP自动的例子的源码分析,学习它的编码方式和代码结构, 所涉及的Action 分三部分 1.共用的Action 2.功能性Action,它们一般会调用共用的Act ...

最新文章

  1. ECCV2020 最佳论文提名 | 流感知技术
  2. Linux日志系统-03:logrotate主配置文件详解
  3. C# 调用cmd执行指令
  4. linux下修改主机名
  5. web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件
  6. day38-数据库应用软件
  7. hdoj 1004 学习思路
  8. 前端开发 样式表的建立和优先级 0229
  9. Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
  10. MySQL主从同步(五)——排错思路
  11. 操作系统形式化验证实践教程(2) - HOL列表与集合
  12. Hark的数据结构与算法练习之冒泡排序
  13. oracle 生成随机姓名_Oracle生成随机日期时间
  14. vscode上的git三部曲+git pull操作
  15. android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...
  16. php 和 photoshop,pscc和ps有什么区别
  17. 五、HTML5单页框架View.js介绍 - View.js的比较优势
  18. STM32F103芯片FSMC使用外扩SRAM芯片
  19. 无线充电qi认证全面解读
  20. 算法之深度优先搜素(DFS)和广度优先搜素(BFS)

热门文章

  1. 笑傲江湖服务器维修,新笑傲江湖手游进不去怎么办 连接不上解决办法
  2. 抖音粉丝怎么增加1000?为什么抖音粉丝涨的慢?
  3. Bresenham逆时针圆弧生成算法
  4. 软件设计原则 — 开放封闭原则
  5. 一行代码隐藏Linux进程
  6. 什么是阿里云备案服务号及相关疑问解答
  7. 模糊数学——分解定理
  8. [精]Oracle VPD详解(虚拟专用数据库)
  9. Halo——zcash新的零知识证明机制,无需Trusted Setup
  10. bios设置raid启动模式Linux,手把手教你做raid,各主板raid开启设置方法