spring-boot 启动

  • 1、实例化/初始化 springAppliction 构造函数处理了几个事

    • 持有启动方法传递的class对象
    • 是否是web类型,还是都不是
    • 初始化spring.factories配置的 ApplicationContextInitializer对象①
    • 初始化spring.factories配置的 ApplicationListener对象②
    • 从调用栈里查找main方法的类对象.
  • 2、运行

    • 配置awt headless模式,声明没有图像设备等.
    • 初始化spring.factories和输入参数指定的 SpringApplicationRunListener对象, 并启动监听.
    • 触发所有的SpringApplicationRunListener的starting方法->发出ApplicationStartingEvent事件③
    • 初始化环境environment
    • 根据环境创建environment
      • 触发所有的SpringApplicationRunListener的environmentPrepared方法->发出ApplicationEnvironmentPreparedEvent事件③
    • 实例化/初始化ApplictionContext, 会判断是否是web环境, 创建对应的applictionContext
    • 初始化spring.factories配置的 SpringBootExceptionReporter对象, 该对象会同时加载spring.factories配置的FailureAnalyzer类对象。SpringBootExceptionReporter用于程序启动时异常捕获,并输出成易于查看的格式.
    • 准备ApplictionContext
      • 触发所有ApplicationContextInitializer对象的initialize方法
      • 触发SpringApplicationRunListener的监听,触发contextPrepared方法 ->发出ApplicationContextInitializedEvent事件③
      • 根据启动方法的class对象加载资源
      • 触发SpringApplicationRunListener的监听,触发contextLoaded方法->发出ApplicationPreparedEvent事件③
  • 刷新ApplictionContext, 委托给spring最原始的refresh方法

    • 触发SpringApplicationRunListener的监听,触发started方法->发出ApplicationStartedEvent事件③
  • 触发ApplicationRunner, CommandLineRunner实现类的run方法

  • 触发SpringApplicationRunListener的监听,触发running方法->发出ApplicationReadyEvent事件③

方法运行结束,程序退出

① 可以实现自己的ApplicationContextInitializer, 在springApplication前执行.
② 可以监听启动过程发生的事件, 如ConfigFileApplicationListener监听ApplicationEnvironmentPreparedEvent事件,处理EnvironmentPostProcessor,可以自定义自己的配置文件加载等.
③ 可以监听事件,在启动的不通阶段插入自定义的处理.

总结:

spring-boot的启动扩展的ApplicationContext,在ApplicationContext初始化/刷新前后做了自定义处理。也方便开发人员在流程中自定义插入自己的实现.

你可能感兴趣的:(spring-boot 启动)