springboot自动配置文件读取以及源码分析
今天来讲讲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自动配置文件读取以及源码分析相关推荐
- spark读取文件源码分析-2
文章目录 1. job1产生时机源码分析 1. DataSoure.getOrInferFileFormatSchema() 2. ParquetFileFormat.inferSchema 1. 简 ...
- spark读取文件源码分析-1
文章目录 1. 问题背景 2. 测试代码 3. 生成的DAG图 1. job0 2. job1 4. job0 产生的时机源码分析 1. 调用DataFrameReader.load,DataFram ...
- spark读取文件源码分析-3
本篇是spark read一个parquet源码分析的第三篇,这一篇主要介绍spark的默认的partition的设置逻辑,当然,这一篇实际上算不上源码分析了 第一篇 第二篇 1 . userProf ...
- 关于Asp.net core配置信息读取的源码分析梳理
概述 我们都知道asp.net core配置信息的读取离不开IConfigurationSource和IConfigurationProvider这两个类,ConfigurationSource可以提 ...
- Mybatis在Spring-boot中自动配置的底层源码分析
前言:在Spring-boot结合Mybatis,我们只需要配置一些数据库连接的基本信息,写好Mapper和Dto就可以跑起来了.但是它是如何帮我们完成自动配置,并且执行我们的sql语句的呢?我们一起 ...
- Integer及String的equals及==注意示例,涉及自动拆箱、自动装箱以及equals源码分析
1. 只要不是创建的Integer对象,那么 -128--127 范围内的数都是相等的,因为不是创建的Integer对象,不管Integer对象是直接赋值,还是调用parseInt,最终都是通过val ...
- SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例
前言: Spring4推出了@Conditional注解,方便程序根据当前环境或者容器情况来动态注入bean 继@Conditional注解后,又基于此注解推出了很多派生注解,比如@Condition ...
- CI源码分析(一)—config配置文件模块
(一) 使用方式 (a) 系统级配置 语言.字符编码.session.cookie等配置项 文件位置: application/config/config.php 加载方式: 自动加载 调用方式: $ ...
- QTP自动例子的源码分析--ClearMainWindow
概述: 本系列文章主要用来研究和分析QTP自动的例子的源码分析,学习它的编码方式和代码结构, 所涉及的Action 分三部分 1.共用的Action 2.功能性Action,它们一般会调用共用的Act ...
最新文章
- ECCV2020 最佳论文提名 | 流感知技术
- Linux日志系统-03:logrotate主配置文件详解
- C# 调用cmd执行指令
- linux下修改主机名
- web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件
- day38-数据库应用软件
- hdoj 1004 学习思路
- 前端开发 样式表的建立和优先级 0229
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
- MySQL主从同步(五)——排错思路
- 操作系统形式化验证实践教程(2) - HOL列表与集合
- Hark的数据结构与算法练习之冒泡排序
- oracle 生成随机姓名_Oracle生成随机日期时间
- vscode上的git三部曲+git pull操作
- android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...
- php 和 photoshop,pscc和ps有什么区别
- 五、HTML5单页框架View.js介绍 - View.js的比较优势
- STM32F103芯片FSMC使用外扩SRAM芯片
- 无线充电qi认证全面解读
- 算法之深度优先搜素(DFS)和广度优先搜素(BFS)