SpringBoot学习篇|主启动类的运行
代码语言:javascript复制package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Demo3Application {
public static void main(String[] args) {
SpringApplication.run(Demo3Application.class, args);
}
}
一张图说明一切
文字描述一下就是:
- 构造函数init加载初始化
- 推断应用类型是否为web
- 通过
getSpringFactoriesIns
根据传入的类名得到所需工厂集合实例,加载所有可用初始化器 - 通过
getSpringFactoriesIns
根据传入的类名得到所需工厂集合实例,设置所有可用程序监听器 - 推断并设置main方法定义类(执行Run函数的类,也就是参数类)
根据传入的类名得到所需工厂集合实例流程:
- 通过加载器获取
spring.factories
文件 - 获取文件中工厂类全路径
- 通过工厂类反射,得到工厂类的class对象,执行构造方法
- 生成工厂类实例并返回
- 执行实例化对象的
run
方法- 启动实例计时器和开启应用监听器的监听功能,进行headless系统属性设置
- 通过
factoriesInstances
根据传入的类名得到所需工厂集合实例,初始化监听器 - 启动已准备好的监听器
- 装配环境参数
- 创建配置环境
- 加载属性资源(配置属性值)
- 加入预监听集合
- 打印banner图案
- 加载上下文 根据类型创建web/standard上下文
- 通过
factoriesInstances
根据传入的类名得到所需工厂集合实例,准备上下文异常报告器 - 上下文前置处理
prepareContext
- 配置监听
- 进行环境配置
- initialize初始化设置
- 获取资源并且进行加载
- 进行上下文刷新
refreshContext
- 加载
bean工厂
- 通过工厂生产
Bean
- 刷新生命周期
- 加载
- 上下文后置结束处理
afterRefresh
到此计时器结束监听 - 发布引用上下文,启动完成
- 执行
Runner
运行器 - 发布应用上下文九旭后返回
- SpringApplication启动结束