【SpringBoot源码】springboot的启动流程原理

目录

 一:入口简介:

二。创建SpringApplication对象

1.推倒出当前项目的启动类型

2.设置Initializer初始化器

3.初始化Listerner监听器

4.反推出main方法所在的class对象。

三.运行SpringApplication#run(java.lang.String...)方法

1):获取运行监听器:

2)发布启动过程中各阶段事件 

3)准备环境Environment

4)创建ApplicationContext IOC容器

5)准备ApplicationContext IOC容器的基本信息 

6)刷新IOC容器 

7)调用所有runners 


 一:入口简介:

首先,分析启动流程,就要 找到入口.

启动流程的入口方法就是这个run方法:

点进去之后就是这样: 

主要分为了两个步骤:

1.创建springBootApplication对象   

2.运行SpringApplication#run(java.lang.String...)方法;

上面说了主要分为两个步骤,那么接下来我们就逐个分析,先来分析 创建SpringApplication对象。

二。创建SpringApplication对象

我们从这里点击进去: 

就会看到这些:

 其中主要分为四个步骤:

1.推倒出当前项目的启动类型

上面的第一个步骤点击进来:可以看到,根据是否引入特定的依赖来我看我们的项目类型。我们项目是servlet:

2.设置Initializer初始化器

上面第二部点进来,发现最终是:

springboot通过加载配置在spring.factories文件中的ApplicationContextInitializer对应的类型并实例化,并将加载的数据存储在了 initializers 成员变量中。:

补充一下,第二步骤的点击时候的参数ApplicationContextInitializer就是从这里拿到的: 

3.初始化Listerner监听器

上面的第三步点进来,发现是将其存到了变量中:

springboot通过加载配置在spring.factories文件中的ApplicationListener对应的类型并实例化,并将加载的数据存储在了 listeners 成员变量中。

补充,上面的 ApplicationListener是从这里拿的:

4.反推出main方法所在的class对象。

 listeners.starting(bootstrapContext, this.mainApplicationClass);

由上面第四步点击进来后,从执行的堆栈中拿出信息,我们看到执行的就是main方法:

我们debug一下,就可以看到拿到的是我们启动的类: 

三.运行SpringApplication#run(java.lang.String...)方法

下面代码是run方法里的:这个是spring的核心启动方法:其中包括了准备环境、配置文件的解析、创建IOC容器、内嵌servlet web容器的启动、事件广播等核心逻辑。 

    public ConfigurableApplicationContext run(String... args) {
        long startTime = System.nanoTime();
        DefaultBootstrapContext bootstrapContext = this.createBootstrapContext();
        ConfigurableApplicationContext context = null;
        this.configureHeadlessProperty();
       //第一步:获取运行监听器
        SpringApplicationRunListeners listeners 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值