spring 引导如何工作,如何加载所有配置

How spring boots works ,How it loads all the configuration

所以我正在使用 spring 启动进行休息 Api 通话。 我想知道 spring boot 是如何一步步加载所有配置的。 就像加载配置时的过程是什么,顺序是什么以及如何得到遵循。 Spring 安全性、数据库配置和 bean 初始化,这些都是如何加载的。 以及 spring 引导如何找到优先级(顺序),哪个应该首先加载,哪个应该是下一个。

Bean 是基于Spring Boot 中的自动配置机制加载的,在jar 文件的META-INF 文件夹中有一个spring.factories 文件,其中包含要加载的配置 class。
当Spring Boot 找到这样的文件时,它会将配置加载为一个bean,而配置通常会加载其他bean。

可以加载其他方式的配置,只需简单地 @Importing 它们,一些类似的工作,例如 @EnableMetrics.

包含这种自动配置机制的 Jar 文件通常称为 starters。

还有一些特殊的 bean 将被 Spring 拾取,例如将变成过滤器的 FilterDefinitionBean,或将在启动后执行的 CommandLineRunner。


通常你不需要太担心 starters 的顺序,因为 Spring Boot 会自动检测正确的顺序来根据依赖关系初始化这些,bean 带有 @DependsOn 注释。
Spring Boot starter autoconfiguraions 发生在你的 bean 已经定义之后,所以它们可以给你回退 bean,但前提是你还没有定义它们。

但有时,尤其是当您有 @ConditionalOnBean 时,您必须明确定义顺序,这可以通过 @AutoConfigureBefore@AutoConfigureAfter 注释来定义此自动配置必须在何处完成已初始化。

另一个注释 @AutoConfigureOrder 是 Spring 与 @Order 注释等效的引导也可用于更改顺序(因为 @Order 不适用于自动配置)。

如果你查看你最喜欢的启动器的源代码,你会看到这些顺序更改注释经常被添加到 class。