springboot启动配置原理之二(运行run方法)

public ConfigurableApplicationContext run(String... args) {
   StopWatch stopWatch = new StopWatch();
   stopWatch.start();
   ConfigurableApplicationContext context = null;
   FailureAnalyzers analyzers = null;
   configureHeadlessProperty();

   //获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories
   SpringApplicationRunListeners listeners = getRunListeners(args);
    //回调所有的获取SpringApplicationRunListener.starting()方法
   listeners.starting();
   try {
       //封装命令行参数
      ApplicationArguments applicationArguments = new DefaultApplicationArguments(
            args);
      //准备环境
      ConfigurableEnvironment environment = prepareEnvironment(listeners,
            applicationArguments);
            //创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成

      Banner printedBanner = printBanner(environment);

       //创建ApplicationContext;决定创建web的ioc还是普通的ioc
      context = createApplicationContext();
       //异常报告
      analyzers = new FailureAnalyzers(context);
       //准备上下文环境;将environment保存到ioc中;而且applyInitializers();
       //applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
       //回调所有的SpringApplicationRunListener的contextPrepared();
       //prepareContext运行完成以后回调所有的 SpringApplicationRunListener的contextLoaded();
      prepareContext(context, environment, listeners, applicationArguments,
            printedBanner);

       //s刷新容器;ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版
       //扫描,创建,加载所有组件的地方;(配置类,组件,自动配置)
      refreshContext(context);
       //从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
       //ApplicationRunner先回调,CommandLineRunner再回调
      afterRefresh(context, applicationArguments);

       //所有的SpringApplicationRunListener回调finished方法
      listeners.finished(context, null);
      stopWatch.stop();
      if (this.logStartupInfo) {
         new StartupInfoLogger(this.mainApplicationClass)
               .logStarted(getApplicationLog(), stopWatch);
      }
       //整个SpringBoot应用启动完成以后返回启动的ioc容器;
      return context;
   }
   catch (Throwable ex) {
      handleRunFailure(context, listeners, analyzers, ex);
      throw new IllegalStateException(ex);
   }
}

//获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories

//回调所有的获取SpringApplicationRunListener.starting()方法

//准备环境

//创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成

//创建ApplicationContext;决定创建web的ioc还是普通的ioc

//准备上下文环境;将environment保存到ioc中;而且applyInitializers();
//applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法
//回调所有的SpringApplicationRunListener的contextPrepared();
//prepareContext运行完成以后回调所有的 SpringApplicationRunListener的contextLoaded();

//从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调
//ApplicationRunner先回调,CommandLineRunner再回调

//所有的SpringApplicationRunListener回调finished方法

原文地址:https://www.cnblogs.com/MagicAsa/p/10745447.html

时间: 2024-07-30 13:06:20

springboot启动配置原理之二(运行run方法)的相关文章

(七)SpringBoot启动配置原理

几个重要的事件回调机制 ApplicationContextInitializer SpringApplicationRunListener ApplicationRunner CommandLineRunner 启动流程 1.创建SpringApplication对象 1 initialize(sources); 2 private void initialize(Object[] sources) { 3 //保存主配置类 4 if (sources != null && source

SpringBoot启动过程原理

最近这两年springboot突然火起来了,那么我们就来看看springboot的运行原理. 一.springboot的三种启动方式: 1.运行带有main方法的2.通过命令 Java -jar命令3.通过spring-boot-plugin的方式 二.springboot 启动时执行方法,有两种方式 第一种方式是用启动时的main方法加载静态方法. 另一种是用初始化注解@postconstruct 执行.(注意点必须void并且参数). 注意点:[1.@PostConstruct会先被执行,静

SpringBoot1.x之启动配置原理及自定义starter

1 启动配置原理 1.1 创建SpringApplication对象 @SuppressWarnings({ "unchecked", "rawtypes" }) private void initialize(Object[] sources) { //保存主配置类 if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources));

Spring boot 启动配置原理

配置在META-INF/spring.factories 有几个主要的类 ApplicationContextInitializer    创建SpringAplication SpringApplicationRunListener 启动的run流程 ApplicationRunner CommandLineRunner 1:创建SpringApplication对象 initialize(sources); private void initialize(Object[] sources)

SpringBoot源码分析----(二)SpringBoot自动配置原理

自动配置原理 1.SpringBoot启动的时候加载主配置类,开启了自动配置功能  @EnableAutoConfiguration [email protected] 功能的作用 @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { 利用  AutoConfigurationImportSelector  给容器

SpringBoot自动配置原理

SpringBoot自动配置主要通过@EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties或者@ConfigurationProperties 等几个注解来进行自动配置完成的. @EnableAutoConfiguration开启自动配置,主要作用就是调用Spring-Core包里的loadFactoryNames(),将autoconfig 包里的已经写好的自动配置加载进来. @Conditional条件注解

springboot启动之后初始化数据的几种方法

1.实现ApplicationRunner和CommandLineRunner接口(建议) 当springboot的main方法快要执行结束时会调用afterRefresh然后再调用callRunners来加载所有的实现ApplicationRunner和CommandLineRunner的类然后执行run方法来初始化所写的东西 2.<1>实现InitializingBean接口(不建议) <2><bean>元素中配置指定的init-method  <3>@

springBoot 自动配置原理

在之前文章中说过,springBoot会根据jar包去添加许多的自动配置,本文就来说说为什么会自动配置,自动配置的原理时什么? springBoot在运行SpringApplication对象实例化时,就会去加载 META-INF/spring.factories文件,就会将这个文件中的配置都加载到spring容器中.下面,我们去看看SpringApplication对象的初始化方法 initialize() 方法. 因为我们在项目启动时有用到这个对象,所以,我们可以直接从这里进入. 找到 in

我是如何做到springboot自动配置原理解析

摘自:https://www.cnblogs.com/zszxz/p/12195703.html 一前言 springboot 2.0.0版本分析,整体的自动配置流程如下: 具体配置参考官方文档:springboot-doc 二 @SpringBootApplication 核心注解@SpringBootConfiguration其实就是@Configuration注解,表示是个配置类:@EnableAutoConfiguration表示springboot的自动配置机制:@ComponentS