【hbz分享】-springboot启动时做了哪些事情

spring启动类启动时的流程

先调用SpringApplication完成一系列初始化操作

  1. 先把启动类保存起来,就是带有main函数的那个类,把这个保存起来
  2. 保存应用类型,是Servlet还是Ractive
  3. 通过getSpringFactoriesInstances(BootstrapRegistryInitializer.class)获取工厂实例来获取bootstrapRegistryInitializers即bootstrap注册初始化器(透漏下,这块会返回0,即在spring.factories找不到这个类)
  4. 通过getSpringFactoriesInstances(ApplicationContextInitializer.class)获取工厂实例来获取应用上下文初始化器
  5. 通过getSpringFactoriesInstances(ApplicationListener.class)获取工厂实例来获取应用程序监听器
  6. 推断并配置项目main函数的主程序启动类

扩展:getSpringFactoriesInstances()方法是通过工厂实例,并且传参是对应的【类.class】,而getSpringFactoriesInstances()中,第一次进入会去扫描spring-boot-autoconfig项目下的spring.factories文件下所有的配置类,以后会直接从map中获取对应配置类,并添加到一个map集合作为缓存,然后去看有没有参数对应的类,如果有就初始化,如果没有就返回null

源码截图:
在这里插入图片描述

紧接着调用run(), 衔接上面的步骤:

  1. 创建一个引导对象上下文BootstrapContext,用来保存上下文参数信息
  2. 配置系统环境变量,就是我们配置的那些环境变量,JVM参数等
  3. 调用getSpringFactoriesInstances(SpringApplicationRunListener.class, argumentResolver);获取默认启动时需要用到的对应监听器,由于在SpringApplication构造方法中已经把spring.factories内容加载到了内存,所以这里再次调用直接从map集合找
  4. 通知所有监听器,启动应用程序,就是遍历循环,一个个启动监听器。
  5. 封装一下应用程序参数: 比如server.port这些配置的参数
  6. 创建应用程序上下文context
  7. 配置应用程序启动方式
  8. 准备上下文, 即把之前的获取的【启动器】【环境变量】【监听器】等等一些东西传给上下文
  9. 结束,打印启动时间

综合总节

  1. 初始化SpringApplication, 运行SpringApplication的run方法
  2. 读取spring,factories的多个初始化监听器,并拉取到map中作为缓存
  3. 配置项目中的环境变量,JVM配置信息,配置文件等信息
  4. 预初始化环境,创建环境对象
  5. 创建Spring容器对象ApplicationContext
  6. 调用spring的refresh加载IOC, 自动装配类,并创建bean等信息
  7. 调用很多监听器并传第给上下文对象
  8. 运行相关runner
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值