当前位置: 首页 > article >正文

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就会被加载。

在这里插入图片描述


http://www.kler.cn/news/283066.html

相关文章:

  • 特种设备锅炉水处理题库及答案
  • 数字化干部管理方案:干部信息、干部档案、干部任免、干部监督、干部画像等一体化
  • 利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
  • OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用
  • WordPress入门级防火墙推荐指南
  • vue3+ts+vite+electron+electron-store+electron-builder打包可安装包
  • uni-app启动本地开发环境,修改默认端口号
  • 抖音电商举办用户体验开放日,加强消费者交流提升服务能力
  • 泰克PCE I控制板7KK1200-3CA11 C73249-F50-L20-3
  • 基于生成对抗模型GAN蒸馏的方法FAKD及其在EdgesSRGAN中的应用
  • 揭秘:安全鞋清洗攻略!轻松应对各种鞋面材料,焕然一新就靠这几招
  • 算法练习题06:leetcode793每日温度
  • 微信小程序:点击事件(bindtap)传递参数
  • 面试官让简述一下elasticsearch
  • 图论----最小生成树讲解与相关题解
  • 开源低代码LLM编排平台Dify:可视化Agent和工作流,如何部署在自己系统中,自定义修改前后端详解
  • Oracle SYSAUX表空间使用率过高进行清理
  • #C++ 笔记三
  • 太速科技-FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡
  • 资料搜索过程样例 - 10吨电动葫芦的缆绳重量
  • 利用OpenCV根据图片识别环境的亮度
  • Linux WPA/WPA2/WPA3/IEEE 802.1X Supplicant
  • C++ 模板基础知识——类模板、变量模板与别名模板(超长纯享版)
  • 【C++】RAII思想与智能指针原理——有效避免内存泄露问题
  • 萤石云 C++ SDK使用指南
  • STL容器中 list(双向链表)的增删改查
  • 51单片机——定时器
  • Unity获取SceneView尺寸
  • Docker 镜像导出与加载:从入门到精通
  • redis(未授权访问漏洞)