最新文章

SpringBoot源码 - 启动

SpringBoot源码 - 启动

SpringBoot Application启动部分的源码阅读.

SpringApplication

常用的SpringApplication.run(Class, Args)启动Spring应用, 创建或者更新ApplicationContext

静态方法run

使用source类实例化一个SpringApplication实例, 并调用实例方法run.

public static ConfigurableApplicationContext run(Object[] sources, String[] args) {
  return new SpringApplication(sources).run(args);
}

初始化initialize

  1. 实例化的时候首先通过尝试加载javax.servlet.Servletorg.springframework.web.context.ConfigurableWebApplicationContext推断当前是否是web环境.

  2. 然后从spring.factories获取ApplicationContextInitializer的实现类.

  3. spring.factories获取ApplicationListener的实现类

  4. 推断出应用的启动类(包含main方法的类): 检查线程栈中元素的方法名是否是main

private Class<?> deduceMainApplicationClass() {
  try {
  //获取线程栈数据
    StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
    for (StackTraceElement stackTraceElement : stackTrace) {
      if ("main".equals(stackTraceElement.getMethodName())) {
        return Class.forName(stackTraceElement.getClassName());
      }
    }
  }
  catch (ClassNotFoundException ex) {
    // Swallow and continue
  }
  return null;
}

到此实例化就完成了.