[SpringBoot]图解SpringBoot启动流程+获取配置流程

一、springboot运行流程

1、springboot获取配置的流程

在这里插入图片描述
上图是对springboot获取配置流程的简单总结。

  • 运行主程序时,调用了@SpringBootApplication注解,这个注解又包含一个@Import注解,用于导入配置类。
  • 这个@Import注解会去类路径下所有的META-INF/spring.factories中去搜索以“AutoConfiguration”为后缀的配置类;
  • 对找到的每一个××AutoConfiguration配置类,根据其上的@EnableConfigurationProperties注解读取对于的××Properties类;
  • 将读取到的××Properties中的属性值绑定到组件中
  • 取用户配置文件,将配置的属性值绑定到组件中
  • 将组件在容器中注册。

就这样完成了配置值的获取。

二、springboot启动流程

在这里插入图片描述
上图是对springboot启动流程的简单总结。
运行主配置类时,主要分为两大步骤:首先创建Springboot的Application对象,然后是运行run方法。

2.1创建Springboot的Application对象

创建的对象根据springboot获取配置的流程,绑定了配置里面的默认值。
主要实现的功能就是到META-INF/spring.factories目录下去寻找两类东西并保存起来。

  • 一个是ApplicationContextInitializer,也就是容器的初始化器;
  • 一个是ApplicationListener,也就是应用程序的监听。
    保存的东西供run方法运行时调用。

2.2运行run方法

(1)去META-INF/spring.factories目录下去获取监听,注意获取的是ApplicationRunListener而不是ApplicationListener。
(2)配置环境,然后调用上一步获取的监听的environmentPrepared方法表示环境准备完成
(3)创建ioc容器
(4)应用初始化器

  • 将配置好的环境在ioc容器中布置;
  • 读取创建Springboot的Application对象是保存的两类东西的方法,一个是初始化器,一个是contextPrepared方法,也就是告诉系统容器准备就绪。

(5)在ioc中注册命令行参数对象
(6)调用(1)获取的ApplicationRunListener中的contextLoaded方法表示上下文环境准备完成
(7)刷新容器:也就是获取、创建和加载所有的组件、配置类和自动配置类。
(8)从容器中获取ApplicationRunner和CommandLineRunner,并调用其中的run方法;
(9)调用(1)获取的ApplicationRunListener中的finished方法表示容器创建完成
(10)返回配置好的ioc容器

文章来源:springboot运行流程和实际应用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章