springboot的启动过程

1、SpringApplication的run方法

springboot应用程序的入口:SpringApplication的run方法

进入run方法后先 创建了SpringApplication对象,随后才调用SpringApplication的run方法.
在这里插入图片描述
SpringApplication的构造方法中做了一些准备工作

2、确定应用程序类型

WebApplicationType.deduceFromClasspath()判断应用程序是容器
在这里插入图片描述
有三种容器:
SERVLET
NONE
REACTIVE
默认使用的是servlet容器

3、加载Springboot自带的初始化器

从spring-boot-autoconfigure 和spring-boot 包下META-INF/spring.factories配置文件中加载实现了ApplicationContextInitializer 的初始化器
在这里插入图片描述
org.springframework.context.ApplicationContextInitializer 接口就是初始化器了
在这里插入图片描述
同时也可以自定义一个初始化器,实现ApplicationContextInitializer接口,实现initialize方法,在项目的resource目录下添加spring.factories 配置文件,将自定义的初始化器注册进去

4、加载监听器

从spring-boot-autoconfigure 和spring-boot 包下META-INF/spring.factories配置文件中加载实现了ApplicationContextInitializer 的监听器
在这里插入图片描述同时也可以自定义一个初始化器,实现ApplicationListener 接口,实现onApplicationEvent方法,在项目的resource目录下添加spring.factories 配置文件,将自定义监听器加载进去

5、设置程序运行的主类

获取程序运行的堆栈信息,StackTraceElement数组包含了StackTrace(堆栈轨迹)的内容,通过遍历它可以得到方法间的调用过程,即可以得到当前方法以及其调用者的方法名、调用行数等信息。设置完程序主类后构造方法就执行完了
在这里插入图片描述

6、启动计时器

实例化SpringApplication后调用非静态的run方法
在这里插入图片描述
StopWatch stopWatch = new StopWatch();
stopWatch.start();
开启计时器

7、设置java.awt.headless 为true

表示运行在服务器端,在没有显示器器和鼠标键盘的模式下照样可以工作,模拟输入输出设备功能。
在这里插入图片描述

8、获取并启用监听器

SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting();

9、设置应用程序参数

将main方法传递进来的args参数封装成一个对象
ApplicationArguments applicationArguments
= new DefaultApplicationArguments(args);
在这里插入图片描述

10、准备环境变量

准备环境变量,包含系统属性和用户配置的属性,执行的代码块在prepareEnvironment 方法内
在这里插入图片描述

11、忽略bean信息

将 spring.beaninfo.ignore 的默认值设为true
也可以在配置文件添加spring.beaninfo.ignore=false 设置 值为false
在这里插入图片描述

12、打印banner

启动时打印出的图案信息
可以自己在resource下创建banner.txt 文件,定义想要的图案
在这里插入图片描述

13、实例化应用程序上下文

调用 createApplicationContext() 方法,用反射创建对象
在这里插入图片描述

14、实例化异常报告器

在spring.factories配置文件中配置了默认的异常报告器,此异常报告器只会捕获springboot启动时抛出的异常,启动完成后程序抛出的异常不会被它捕获
在这里插入图片描述

15、准备上下文环境

在这里插入图片描述
实例化beanNameGenerator
postProcessApplicationContext 中实例化单例的beanNameGenerator ,用来生成bean的名称
applyInitializers 执行初始化方法
之前加载的ApplicationContextInitializer
注册启动参数进上下文
beanFactory.registerSingleton(“springApplicationArguments”, applicationArguments);

16、刷新上下文

spring的生命周期相关

17、刷新上下文后置处理

afterRefresh 方法是启动后的一些处理,留给用户扩展使用,目前这个方法里面是空的

18、结束计时器,打印耗时

停止计时,并且打印出启动耗时
在这里插入图片描述

19、发出容器就绪事件

在这里插入图片描述

20、执行自定义run方法

callRunners(context, applicationArguments) 可以在启动完成后执行
两种方式实现自定义run方法:
1、实现ApplicationRunner接口
2、实现CommandLineRunner接口
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值