SpringApplication执行流程

117 阅读1分钟

SpringApplication是SpringBoot框架中的核心类,用于启动Spring应用程序,主要包括实例化阶段和执行阶段。

实例化阶段

SpringApplication的构造方法中主要完成了以下工作:

  • 设置资源加载器resourceLoader。
  • 设置应用程序的主要配置源primarySources。
  • 推断应用程序类型webApplicationType:NONE、SERVLET、REACTIVE。
  • 加载在META-INF/spring.factories中声明的引导上下文初始化器BootstrapRegistryInitializer,默认没有实现。
  • 加载在META-INF/spring.factories中声明的应用上下文初始化器ApplicationContextInitializer。
  • 加载在META-INF/spring.factories中声明的应用监听器ApplicationListener。
  • 推断应用程序的启动类mainApplicationClass。

执行阶段

SpringApplication的run方法中主要完成了以下工作:

  • 创建SpringApplicationRunListeners对象。

    • 管理应用启用时的监听器SpringApplicationRunListener。
    • 管理用于统计应用启动时间和执行上下文环境数据的统计器ApplicationStartup。
  • 创建并配置ConfigurableEnvironment对象,用于管理应用程序的配置信息。

  • 创建并配置ConfigurableApplicationContext对象。

  • 加载主要配置源primarySources及指定的其它配置源信息,将其转成BeanDefinition信息。

  • 刷新ConfigurableApplicationContext,进入spring执行流程。

    • 调用Bean工厂后置处理器ConfigurationClassPostProcessor进行组件扫描和自动装配,将外部资源转成BeanDefinition信息。
    • 启动内嵌的Web服务器,提供web服务。
    • 实例化所有非懒加载的单例bean。
  • 执行ApplicationRunner和CommandLineRunner bean对象中的逻辑。