spring-boot 运行源码分析

spring-boot 运行源码分析

spring-boot

  • 一个简单的demo。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    @SpringBootApplication
    public class Main {

    public static void main(String[] args) {

    // 主要运行类
    SpringApplication.run(Main.class, args);
    }

    }
  • 可以看到源码

    1
    2
    3
    4
    5
    public static ConfigurableApplicationContext run(Object[] sources, String[] args) {
    // 加载资源,
    // 再运行.
    return new SpringApplication(sources).run(args);
    }
    • 初始化资源

      1
      2
      3
      4
      public SpringApplication(Object... sources) {
      // 初始化资源。
      initialize(sources);
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      // 加载资源。主要初始化上下文,以及监听器
      @SuppressWarnings({ "unchecked", "rawtypes" })
      private void initialize(Object[] sources) {
      if (sources != null && sources.length > 0) {
      this.sources.addAll(Arrays.asList(sources));
      }
      // deduceWebEnvironment 判断是不是web环境
      this.webEnvironment = deduceWebEnvironment();
      // 获取ContextInitializer 应用程序初始化器
      /*
      getSpringFactoriesInstances
      会读取spring-core-xxx . META-INF 中的spring.factory中的文件。
      */
      setInitializers((Collection) getSpringFactoriesInstances(
      ApplicationContextInitializer.class));
      // listener 应用程序监听器
      setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
      // 找出main类,这里是MyApplication类
      this.mainApplicationClass = deduceMainApplicationClass();
      }
      • spring.factory 主要包含了以下几个。
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        # PropertySource Loaders
        org.springframework.boot.env.PropertySourceLoader

        # Failure Analyzers
        org.springframework.boot.diagnostics.FailureAnalyzer

        # Run Listeners
        org.springframework.boot.SpringApplicationRunListener

        # Environment Post Processors
        org.springframework.boot.env.EnvironmentPostProcessor

        # Application Listeners
        org.springframework.context.ApplicationListener=

        # FailureAnalysisReporters
        org.springframework.boot.diagnostics.FailureAnalysisReporter=