Bootstrap

面试题-SpringCloud的启动流程

在这里插入图片描述

关键词

  • prepareEnvironment
  • BootstrapApplicationListener
  • BootStrap Context(启动应用上下文)
  • Environment中bootstrap属性

面试回答

  1. 引入SpringCloud相关组件后,均会引入一个spring-cloud-context的依赖包,这个项目的META-INF/spring.factories中会引入一个监听器(BootstrapApplicationListener)
  2. SpringBoot主应用上下文启动流程中,会有一个prepareEnvironment阶段,该阶段完成后,会发布事件触发BootstrapApplicationListener监听逻辑
  3. BootstrapApplicationListener会触发一个新的SpringBoot应用上下文(即Bootstrap Context)的启动流程
  4. 最终,Bootstrap Context将会作为SpringBoot主应用上下文父应用上下文

BootstrapApplicationListener发起Bootstrap Context启动流程之前,会向Environment中放置一个bootstrap属性。所以当Bootstrap Context在走SpringBoot启动流程时**,虽然也会走到prepareEnvironment阶段并触发BootstrapApplicationListener的监听逻辑,但是此时BootstrapApplicationListener由于判断到Environment中存在bootstrap属性,**就会跳过剩余逻辑。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;