【SpringBoot】03-启动过程源码解析

本文详细剖析了SpringBoot的启动流程,从构造SpringApplication对象开始,涵盖推测web应用类型、初始化BootstrapRegistry、获取ApplicationContextInitializer、ApplicationListener等,直至Spring容器的刷新和应用运行状态的变更。同时,文章也提及了配置文件的解析和加载顺序,帮助读者深入理解SpringBoot的运行机制。
摘要由CSDN通过智能技术生成

构造SpringApplication对象

1、推测web应用类型

  1. 如果项目依赖中存在org.springframework.web.reactive.DispatcherHandler,并且不存在 org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.REACTIVE
  2. 如果项目依赖中不存在org.springframework.web.reactive.DispatcherHandler,也不存在 org.springframework.web.servlet.DispatcherServlet,那么应用类型为WebApplicationType.NONE
  3. 否则,应用类型为WebApplicationType.SERVLET

2、获取BootstrapRegistryInitializer对象

  1. 从"META-INF/spring.factories"中读取key为BootstrapRegistryInitializer类型的扩展点,并实例化出对应扩展点 对象

  2. BootstrapRegistryInitializer的作用是可以初始化BootstrapRegistry

  3. 上面的DefaultBootstrapContext对象就是一个BootstrapRegistry,可以用来注册一些对象,这些对象可以用在从SpringBoot启动到Spring容器初始化完成的过程中

  4. 我的理解:没有Spring容器之前就利用BootstrapRegistry来共享一些对象,有了Spring容器之后就利用Spring容器来共享一些对象

3、获取ApplicationContextInitializer对象

  1. 从"META-INF/spring.factories"中读取key为ApplicationContextInitializer类型的扩展点,并实例化出对应扩展 点对象

  2. 顾名思义,ApplicationContextInitializer是用来初始化Spring容器ApplicationContext对象的,比如可以利用 ApplicationContextInitializer来向Spring容器中添加ApplicationListener

4、获取ApplicationListener对象

1. 从"META-INF/spring.factories"中读取key为ApplicationListener类型的扩展点,并实例化出对应扩展点对象

2. ApplicationListener是Spring中的监听器,并不是SpringBoot中的新概念,不多解释了

5、推测出Main类

(main()方法所在的类)

没什么具体的作用,逻辑是根据当前线程的调用栈来判断main()方法在哪个类,哪个类就是Main类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值