java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > spring boot 启动

spring boot 启动过程步骤详解

作者:virtuousOne

本文分步骤给大家介绍了spring boot 启动过程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

在外面启动spring boot项目的时候,入口在如下方法中

那么它的启动过程是如何的,通过点击进去发现是如下方法;

  public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
        return (new SpringApplication(primarySources)).run(args);
    }

在这个方法中,可以分为2个大步骤;
一:new SpringApplication(primarySources): 即将我们传进来的class进行创建为springApplication。

在这里面
1.记录传入的primarySources
2.推测当前应用的类型

3.从spring.factories中获取BootstrapRegistryInitializer
4.从spring.factories中获取ApplicationContextInitializer
5.并且也获取ApplicationListener

	this.bootstrapRegistryInitializers = new ArrayList<>(
				getSpringFactoriesInstances(BootstrapRegistryInitializer.class));
		setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
		this.mainApplicationClass = deduceMainApplicationClass();

6.推测当前main方法对应的启动类

二:调用run()方法
1.创建并初始化DefaultBootstrapContext
2.获取SpringApplicationRunListeners

SpringApplicationRunListeners listeners = getRunListeners(args);

3.调用SpringApplicationRunListeners 的starting(),发布ApplicationStartingEvent事件。
4.将启动参数artgs封装为ApplicationArguments对象
5.准备Environment
6.创建spring容器(ApplicationContext)
7.预处理spring容器

prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);

8.刷新

	refreshContext(context);

9.调用SpringApplicationRunListener的started()方法,发布ApplicationStartedEvent事件

listeners.started(context, timeTakenToStartup);

10.调用SpringApplicationRunListener的ready()方法,发布ApplicationReadyEvent事件

try {
			Duration timeTakenToReady = Duration.ofNanos(System.nanoTime() - startTime);
			listeners.ready(context, timeTakenToReady);
		}
		catch (Throwable ex) {
			handleRunFailure(context, ex, null);
			throw new IllegalStateException(ex);
		}

到此这篇关于spring boot 启动过程的文章就介绍到这了,更多相关spring boot 启动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文