springboot自动配置源码解析

news/2025/2/21 5:52:14/

概述

使用springboog的时候引入starter就自动为我们加载,例如我们引入 spring-boot-starter-web 之后,就自动引入了 Spring MVC 相关的 jar 包,从而自动配置 Spring MVC 。

自动装配原理

@SpringBootApplication
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,
在这里插入图片描述

@SpringBootConfiguration:Spring Boot的配置类; 标注在某个类上,表示这是一个Spring Boot的配置类;
@EnableAutoConfiguration:开启自动配置功能;
@ComponentScan : 扫描包 相当于在spring.xml 配置中context:comonent-scan 但是并没有指定basepackage,如果没有 指定spring底层会自动扫描当前配置类所有在的包

@EnableAutoConfiguration

在这里插入图片描述
其中@Import({AutoConfigurationImportSelector.class})是重点

通过@import向spring容器注入AutoConfigurationImportSelector类

在这里插入图片描述

EnableAutoConfigurationImportSelector 实现了DeferredImportSelectorSpring内部在解析@Import注解时会调
用getAutoConfigurationEntry方法

getAutoConfigurationEntry方法会调用getCandidateConfigurations方法

// AutoConfigurationImportSelector.javaprotected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {// <1> 加载指定类型 EnableAutoConfiguration 对应的,在 `META-INF/spring.factories` 里的类名的数组List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());// 断言,非空Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you " + "are using a custom packaging, make sure that file is correct.");return configurations;
}

<1> 处,调用 #getSpringFactoriesLoaderFactoryClass() 方法,获得要从 META-INF/spring.factories 加载的指定类型为 EnableAutoConfiguration 类。代码如下:

// AutoConfigurationImportSelector.javaprotected Class<?> getSpringFactoriesLoaderFactoryClass() {return EnableAutoConfiguration.class;
}

<1> 处,调用 SpringFactoriesLoader#loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) 方法,加载指定类型 EnableAutoConfiguration 对应的,在 META-INF/spring.factories 里的类名的数组

现在已经知道了自动装配是怎么加载的,那么问题来了,springboot自动装配调用入口在哪里?
这一块属于spring的知识点,提一嘴,使用@import注入的类spring会加载到ioc容器中,然后调用当前导入类的process方法
在这里插入图片描述
我们导入的类实现了
在这里插入图片描述
我们看下process方法

	@Overridepublic void process(AnnotationMetadata annotationMetadata, DeferredImportSelector deferredImportSelector) {Assert.state(deferredImportSelector instanceof AutoConfigurationImportSelector,() -> String.format("Only %s implementations are supported, got %s",AutoConfigurationImportSelector.class.getSimpleName(),deferredImportSelector.getClass().getName()));AutoConfigurationEntry autoConfigurationEntry = ((AutoConfigurationImportSelector) deferredImportSelector).getAutoConfigurationEntry(annotationMetadata);this.autoConfigurationEntries.add(autoConfigurationEntry);for (String importClassName : autoConfigurationEntry.getConfigurations()) {this.entries.putIfAbsent(importClassName, annotationMetadata);}}

最终在process方法里边会加载spring.factories文件的自动配置类


http://www.ppmy.cn/news/249282.html

相关文章

python面向对象操作2(速通版)

目录 一、私有和公有属性的定义和使用 1.公有属性定义和使用 2.私有属性 二、继承 1.应用 2.子类不能用父类的私有方法 3.子类初始化父类 4.子类重写和调用父类方法 5.多层继承 6.多层继承-初始化过程 7.多继承基本格式 8.多层多继承时的初始化问题 9.多继承初始化…

ML算法——梯度下降随笔【机器学习】

文章目录 11、梯度下降 11、梯度下降 梯度下降如何帮助参数优化&#xff1f; 梯度下降是一种用于参数优化的常见方法。它的基本思想是通过迭代地更新参数&#xff0c;以减小损失函数|代价函数的值&#xff0c;从而找到一个最优解。 梯度方向&#xff1a;→|向右|正向 ←|向左|反…

Java实现excel 2003、2007导入功能

Java实现excel2003、2007导入功能完整版demo, 内置sql文件: https://gitee.com/PanGuanQing/excel-import-demo.git 1.要导入的excel数据 2.导入依赖 <!--excel 2003--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a…

Excel VBA视频教程20集+PPT课件 完整版

通过"实践在前 理论在后"的全新课程架构&#xff0c;轻轻松松回避所有晦涩的概念&#xff0c;20天熟练应用VBA。 教程目录01 课程介绍-什么是VBA02 第一次编写代码-for03 使用IF进行逻辑判断04 操作工作表05 操作工作薄06 操作单元格对象107 操作单元格对象208 VBA事…

Python批量下载excel表中超链接图片

目录 背景 数据格式 处理步骤 1.使用xlrd读取excel表格数据 2.详细代码 ①引入相关库 ②实例代码 背景 导出数据到excel&#xff0c;数据中有图片&#xff0c;需求是批量下载图片的指定文件夹 数据格式 数据类型有直接是文本&#xff0c;也有显示图片&#xff0c;存在多张…

excel计算机系统验证方案,Excel公式计算数据完整性验证方案

Excel公式计算数据完整性验证方案Excel公式数据完整性验证协议第1页&#xff0c;共9页审核和批准协议的审核和批准页面协议的审核和批准的页面第2页&#xff0c;共9页1.验证目的此验证基于风险评估RA-1610005-01(适用于Excel公式计算表)&#xff0c;它是否可以满足数据完整性的…

2016版excel_【重磅分享】最完整EXCEL教程,视频+PPT下载

肉眼品世界导读&#xff1a; 小编作为一个研发&#xff0c;曾经认为Excel就是和办公人员打字一样&#xff0c;多年以后才发觉各种好用的scrumworks管理工具还不太有Excel好用&#xff0c;曾经遇到一个项目经理&#xff0c;把jira里的bug导出来&#xff0c;三下五除二&#xff0…

EXCEL必备工具箱(EXCELtool)官方免费版V17.0 | 超级excel插件工具箱下载 | 完整的excel办公自动化工具箱

EXCEL必备工具箱是一款大部分功能免费且齐全可还能同时支持微软EXCEL和国产的金山WPS Office办公软件的excel插件工具箱&#xff0c;功能类似Kutools for Excel、Excel易用宝以及ASAP Utilities这些较为知名的Excel增强插件&#xff0c;该excel办公自动化插件自带免费多标签&am…