SpringBoot为什么需要创建两次ApplicationContext?

问题描述

在运行 SpringBoot 源码的时候发现:如果在 AbstractApplicationContext.refresh().invokeBeanFactoryPostProcessors(beanFactory); 打上断点,程序会两次停在此位置。所以我比较了两次的 Context 的类型,两次分别是:AnnotationConfigServletWebServerApplicationContextAnnotationConfigApplicationContext,当然两者的具体细节我还没有比较,只知道两者都有 Bean Factory,所以说是不是多余的?或者说之前创建的 AnnotationConfigApplicationContext 有什么作用?希望各位大佬能给我个答案,谢谢。

两者简单比较

1. AnnotationConfigServletWebServerApplicationContext

我们自定义的bean基本都在这里加载

2. AnnotationConfigApplicationContext

虽然没有我们自定义的Bean和入口类,但是也有21左右的Bean定义,和1的运行流程类似

运行截图

第一次DEBUG暂停

第一次DEBUG暂停

第二次DEBUG暂停

第二次DEBUG暂停

阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题