一、引言
在前面的博文《初识 SpringApplication》中,Huazie 带大家一起分析了 SpringApplication
类实例化的逻辑。当 SpringApplication
对象被创建之后,我们就可以调用它的 run
方法来启动和运行 Spring Boot 项目。
本篇博文将围绕 SpringApplication
的 run
方法展开,带大家一起从源码分析 Spring Boot 的运行流程。
在前面的博文《初识 SpringApplication》中,Huazie 带大家一起分析了 SpringApplication
类实例化的逻辑。当 SpringApplication
对象被创建之后,我们就可以调用它的 run
方法来启动和运行 Spring Boot 项目。
本篇博文将围绕 SpringApplication
的 run
方法展开,带大家一起从源码分析 Spring Boot 的运行流程。
上篇博文《共享 MetadataReaderFactory 上下文初始化器》,Huazie 带大家详细分析了SharedMetadataReaderFactoryContextInitializer
。而在 spring-boot-autoconfigure 子模块中预置的上下文初始化器中,除了共享 MetadataReaderFactory
上下文初始化器,还有一个尚未分析。
那么本篇就来详细分析一下 ConditionEvaluationReportLoggingListener
【即 ConditionEvaluationReport
日志记录上下文初始化器】。
上篇博文《深入 ApplicationContext 初始化器实现》,Huazie 带大家详细分析了 分析 Spring Boot 中预置的应用上下文初始化器实现【即 ApplicationContextInitializer
接口实现类】的源码,了解了在 Spring 容器刷新之前初始化应用程序上下文的一些具体操作。
当然其中有些实现源码比较复杂,还没有深入分析。那本篇就来对其中的SharedMetadataReaderFactoryContextInitializer
【即 共享 MetadataReaderFactory
上下文初始化器】详细分析下。
前面的博文《ApplicationContextInitializer 详解》,Huazie 带大家详细分析了 ApplicationContextInitializer
的加载和初始化的逻辑,不过有关 ApplicationContextInitializer
接口的实现尚未提及 。
那本篇 Huazie 就带大家一起分析 Spring Boot 中预置的应用上下文初始化器实现【即 ApplicationContextInitializer
接口实现类】的源码,了解在 Spring 容器刷新之前初始化应用程序上下文的一些具体操作。
上一篇博文《BootstrapRegistry 初始化器实现》,Huazie 向大家介绍了如何自定义 BootstrapRegistryInitializer
接口实现,并以此来执行自定义的初始化操作【如注册自定义的 Bean、添加 BootstrapContext 关闭监听器】。其中涉及到了 BootstrapContext
的部分使用场景,那本篇就向大家演示下 Spring Boot 启动过程中如何使用引用上下文 BootstrapContext
及其默认实现 。
前面的博文《BootstrapRegistryInitializer 详解》,Huazie 带大家一起详细分析了 Spring Boot 启动时加载并初始化 BootstrapRegistryInitializer
及其相关的类的逻辑。本篇就让我们自定义 BootstrapRegistryInitializer
接口实现,以此来执行自定义的初始化操作【如注册自定义的 Bean、添加 BootstrapContext 关闭监听器】。
书接前文《BootstrapRegistry 详解》,在介绍 BootstrapRegistry
的内部类 InstanceSupplier
的 get
方法时,看到了它的唯一参数 BootstrapContext
接口【即引导上下文】。而这个接口及其默认实现就是本篇要重点介绍的对象,且听我娓娓道来。
前面的博文《BootstrapRegistryInitializer 详解》,Huazie 带大家一起详细分析了 Spring Boot 启动时加载并初始化 BootstrapRegistryInitializer
及其相关的类的逻辑。其中有个 BootstrapRegistry
接口只是简单提及,本篇就详细分析一下 BootstrapRegistry
接口,这对于我们后续理解 《BootstrapRegistry
初始化器实现》的内容至关重要。