springboot启动分析

##springboot启动代码分析

1. 创建SpringApplication对象

1-1 创建SpringApplication时,会调用initialize方法,这个方法会做4件事情。
  1. 赋值springApplication的webEnvironment属性。 用来判断是否web环境。
  2. 赋值springApplication的initializers属性。 加载spring.factories文件中定义的ApplicationContextInitializer实现类。ApplicationContextInitializer这个接口会在ConfiurableApplicationContext#refresh() 前被调用,允许我们对ConfiurableApplicationContext做一些设置和处理。
  3. 赋值springApplication的initializers属性。 加载spring.factories文件中定义的ApplicationListener实现类。 ApplicationListener接口的实现类会和applicationContext进行绑定,在接收到applicationContext发出的通知事件后进行一些处理。是观察者模式的一种实现。
  4. 赋值springApplication的mainApplicationClass属性。这个属性表示springApplication的main方法的类。
	private void initialize(Object[] sources) {
		if (sources != null && sources.length > 0) {
			this.sources.addAll(Arrays.asList(sources));
		}
		this.webEnvironment = deduceWebEnvironment();
		setInitializers((Collection) getSpringFactoriesInstances(
				ApplicationContextInitializer.class));
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
		this.mainApplicationClass = deduceMainApplicationClass();
	}

2.运行springApplication.run()方法

2-1 加载spring.factories文件中定义的SpringApplicationRunListener实现类,并启动。 通过实现SpringApplicationRunListener接口回调可以让用户在springApplication启动的各个流程中加入自己的逻辑。包括:
  1. 开始启动
  2. Environment构建完成
  3. ApplicationContext构建完成
  4. ApplicationContext完成加载
  5. ApplicationContext完成刷新并启动
package org.springframework.boot;
public interface SpringApplicationRunListener {

    // 在run()方法开始执行时,该方法就立即被调用,可用于在初始化最早期时做一些工作
    void starting();
    // 当environment构建完成,ApplicationContext创建之前,该方法被调用
    void environmentPrepared(ConfigurableEnvironment environment);
    // 当ApplicationContext构建完成时,该方法被调用
    void contextPrepared(ConfigurableApplicationContext context);
    // 在ApplicationContext完成加载,但没有被刷新前,该方法被调用
    void contextLoaded(ConfigurableApplicationContext context);
    // 在ApplicationContext刷新并启动后,CommandLineRunners和ApplicationRunner未被调用前,该方法被调用
    void started(ConfigurableApplicationContext context);
    // 在run()方法执行完成前该方法被调用
    void running(ConfigurableApplicationContext context);
    // 当应用运行出错时该方法被调用
    void failed(ConfigurableApplicationContext context, Throwable exception);
}
2-2 构建Environment
2-3 创建applicationContext实例,并进行初始化。
2-4 初始化之后,调用applicationContext#refresh()方法。 refresh中会进行bean的初始化等操作。
2-5 调用callRunners方法,执行ApplicationRunner和CommandLineRunner的run方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值