![](https://i-blog.csdnimg.cn/direct/a25840834d1f48269c0c538bae063c88.png)
关键词
- prepareEnvironment
- BootstrapApplicationListener
- BootStrap Context(启动应用上下文)
- Environment中bootstrap属性
面试回答
- 引入SpringCloud相关组件后,均会引入一个spring-cloud-context 的依赖包,这个项目的META-INF/spring.factories 中会引入一个监听器(BootstrapApplicationListener)
- 在SpringBoot主应用上下文 启动流程中,会有一个prepareEnvironment阶段 ,该阶段完成后,会发布事件触发BootstrapApplicationListener监听逻辑
- BootstrapApplicationListener 会触发一个新的SpringBoot应用上下文(即Bootstrap Context)的启动流程
- 最终,Bootstrap Context 将会作为SpringBoot主应用上下文 的父应用上下文
BootstrapApplicationListener 发起Bootstrap Context启动流程之前,会向Environment 中放置一个bootstrap属性 。所以当Bootstrap Context 在走SpringBoot启动流程时**,虽然也会走到 prepareEnvironment阶段并触发 BootstrapApplicationListener的监听逻辑,但是此时 BootstrapApplicationListener由于判断到 Environment中存在bootstrap属性,**就会跳过剩余逻辑。
![](https://i-blog.csdnimg.cn/img_convert/ba4f2ebfb513b58e35670e17c2503422.png)