SpringApplication启动流程

spring-boot启动项说明

spring-boot项目每次启动时都可以看到一个SpringApplication.run()执行,而且最近有需求想要在项目启动时加载定时任务,所以研究纪录SpringApplication的启动过程

public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
}
1.初始化监听器

初始化Spring Boot自带的监听器,以及添加到SpringApplication的自定义监听器

2.发布ApplicationStartedEvent事件

Spring Boot会发布一个ApplicationStartedEvent事件。如果你想在这个时候执行一些代码可以通过实现ApplicationListener接口实现;

public class ApplicationStartedListener implements ApplicationListener
3.装配参数和环境

首先会初始化参数,然后装配环境,确定是web环境还是非web环境

4.发布ApplicationEnvironmentPreparedEvent事件

在装配完环境后,就触发ApplicationEnvironmentPreparedEvent事件。如果想在这个时候执行一些代码,可以订阅这个事件的监听器,方法同第二步

5.打印Banner

启动的Banner就是在这一步打印出来的

6.创建ApplicationContext

这里会根据是否是web环境,来决定创建什么类型的ApplicationContext

7.装配Context

设置Context的环境变量、注册Initializers、beanNameGenerator等

8.发布ApplicationPreparedEvent事件准备

源码中是空的,并没有真正发布ApplicationPreparedEvent事件

9.注册、加载等

注册springApplicationArguments、springBootBanner,加载资源等。

10.发布ApplicationPreparedEvent事件

真正发布了ApplicationPreparedEvent事件

11.refreshContext

装配context beanfactory等非常重要的核心组件

12.afterRefreshContext

调用自定义的Runners

13.发布ApplicationReadyEvent事件

最后一步,发布ApplicationReadyEvent事件,启动完毕,表示服务已经可以开始正常提供服务了。通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了

流程图如下所示
springapplicationflow.png

你可能感兴趣的:(SpringApplication启动流程)