SpringBoot启动源码解析

创建SpringApplication实列

调用initializer方法

private void initialize(Object[] sources) {
// 1. 将传入的Application 放入 Set<Object> 集合中
        if (sources != null && sources.length > 0) {
            this.sources.addAll(Arrays.asList(sources));
        }
// 2. 判断是否是web环境
        this.webEnvironment = this.deduceWebEnvironment();
// 3. 创建并初始化  ApplicationInitializer 列表        
	    this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class));
// 4.  创建并初始化  ApplicationListeners
        this.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class));
// 5. 初始化主类       mainApplicationClass
        this.mainApplicationClass = this.deduceMainApplicationClass();
    }

判断是否是WBe环境

private boolean deduceWebEnvironment() {
        String[] var1 = WEB_ENVIRONMENT_CLASSES;
        int var2 = var1.length;

        for(int var3 = 0; var3 < var2; ++var3) {
            String className = var1[var3];
            if (!ClassUtils.isPresent(className, (ClassLoader)null)) {
                return false;
            }
        }

        return true;
    }
  1. 主要是判断 className 里有没有 javax.servlet.Servlet", "org.springframework.web.context.ConfigurableWebApplicationContext这两个类 如果有就是WEB环境 否则就不是。

创建并初始化ApplicationInitializer

  1. 创建 Initializer 实例 先获取initializer的名字 然后通过set去重 然后将所有initializer实例化
  2. 通过反射创建对象的方式
  3. 根据SpringFactoriesLoader.loadFactory-Name(type,classLoader) 获取initializer名称

创建并初始化 ApplicationListeners

同上

run方法

主要工作

  1. 创建计时器 StopWatch
  2. 配置awt系统属性
  3. 获取SpringApplicationRunListeners (获取Spring应用运行时监听器)
  4. 启动SpringApplicationRunListeners
  5. 创建ApplicationArguments
  6. 创建并初始化 ConfigurableEnvironment (配置环境变量)
  7. 打印Banner
  8. 创建ConfigurableApplicationContext (应用程序上下文)
  9. 准备ConfigurableApplicationContext
  10. 刷新ConfigurableApplicationContext
  11. 容器刷新后动作
  12. SpringApplicationRunListeners发布finish事件 (运行时监听器发布完成事件)
  13. 计时器停止计时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值