SpringBoot-启动流程

Run方法做了哪些事情?

我们重点关注红框中的内容:

  • BootstrapContext 是一个简单的引导上下文,它在启动期间以及环境后处理过程中可用,直到应用上下文 ApplicationContext 准备就绪。
    它提供了对可能创建成本高昂的单例的延迟访问,或者在 ApplicationContext 可用之前需要共享的单例。
  • ConfigurableEnvironment准备环境,可以看到有两种,一种是SERVLET一种是REACTIVE
  • 创建ConfigurableApplicationContext

    这里做的事情,一个是超类创建了DefaultListableBeanFactory:

    而是实例化了两个Reader,一个是基于注解驱动的Bean读取,一个是基于xml文件的Bean读取:

我们平时使用注解驱动比较多,我们来看看看这个AnnotatedBeanDefinitionReader做了什么事情?

很清晰的可以看到调用了AnnotationConfigUtils中的一个方法,这里注册了一下PostProcessor其中ConfigurationClassPostProcessor非常的重要,它实现了BeanFactoryPostProcessor,这个是做配置类@Configuration Bean导入的,其中是通过ConfigratonParser 把每个Configration 类加载并放到configurationClasses缓存中:

同时这个parse类也负责一些注解的Bean加载,这里逻辑很长都在doProcessConfigurationClass方法里面:

好了这些重点逻辑看完了,下面就是我们比较熟悉的Spirng Context刷新了。

Context 刷新与Run 启动以后的关联

我们通过上面的分析知道,Run方法里面给我们准备好了Environment,Context,下面就是进行Context的刷新了,我们重点关注BeanFactoryPostProcessor 因为前文我们提到很重要的一个工作就是注册了ConfigurationClassPostProcessor:

我们可以很清晰的看到在这里执行了真正的调用,这样一来,我们的BeanDefinition就会被加载。

相关推荐
2301_7807896610 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设11 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒11 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
步行cgn11 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川11 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵11 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David12 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10012 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin13 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质13 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring