应用上下文的刷新工作

发布时间:2026/11/4 1:33:37

应用上下文的刷新工作 位置在abstractApplicationContext.refresh()SpringBoot启动流程往期博客SpringBoot启动流程ConfigurationClassPostProcessorbean的加载流程publicvoidrefresh(){......invokeBeanFactoryPostProcessors(beanFactory);registerBeanPostProcessors(beanFactory);......finishBeanFactoryInitialization(beanFactory);......finishRefresh();}一、invokeBeanFactoryPostProcessors()先执行 beanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry()再执行 beanFactoryPostProcessor 的 postProcessBeanFactory()数据来源有 applicationContext.beanFactoryPostProcessors以及类型为BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor的beanDefinition其中有非常重要的beanDefinitionRegistryPostProcessorConfigurationClassPostProcessor在postProcessBeanDefinitionRegistry()中加载自定义bean的beanDefinition参考博客ConfigurationClassPostProcessor二、registerBeanPostProcessors()提前创建beanDefinitionMap中类型为BeanPostProcessor的bean放到beanFactory的beanPostProcessors集合中。三、initApplicationEventMulticaster()再创建应用上下文时会创建AnnotatedBeanDefinitionReader对象在AnnotatedBeanDefinitionReader的构造函数中会向beanFactory注册两个beanDefinitionEventListenerMethodProcessor、DefaultEventListenerFactory。其中EventListenerMethodProcessor是SmartInitializingSingleton实现类在preInstantiateSingletons()方法的最后一步调用类型为SmartInitializingSingleton的bean的afterSingletonsInstantiated()方法。在EventListenerMethodProcessor的afterSingletonsInstantiated()方法中会遍历bean找出方法上含有EventListener的bean通过DefaultEventListenerFactory将含有EventListener的方法封装成一个ApplicationListenerApplicationListenerMethodAdapter然后将这个应用监听器保存到应用上下文的applicationListeners集合中以及引用上下文的SimpleApplicationEventMulticaster的DefaultListenerRetriever的applicationListeners集合中。通过applicationContext.publishEvent(new MyApplicationEvent(App.class, Arrays.asList(“a”,“b”,“c”)));发布事件时会调用应用上下文的SimpleApplicationEventMulticaster的multicastEvent()方法在multicastEvent()方法中会遍历DefaultListenerRetriever的applicationListeners集合根据publishEvent()方法的参数类型匹配EventListener注解的class类型匹配到对应的ApplicationListenerMethodAdapter后会调用该ApplicationListenerMethodAdapter的onApplicationEvent()方法在该方法中通过反射调用EventListener的方法。四、finishBeanFactoryInitialization()finishBeanFactoryInitialization()中会调用beanFactory 的 preInstantiateSingletons()publicvoidpreInstantiateSingletons()throwsBeansException{......ListStringbeanNamesnewArrayList(this.beanDefinitionNames);for(StringbeanName:beanNames){......getBean(beanName);......}for(StringbeanName:beanNames){ObjectsingletonInstancegetSingleton(beanName);if(singletonInstanceinstanceofSmartInitializingSingleton){......SmartInitializingSingletonsmartSingleton(SmartInitializingSingleton)singletonInstance;......smartSingleton.afterSingletonsInstantiated();......}}}getBean()为bean的加载流程参考博客bean的加载流程bean加载完后遍历bean集合如果实现SmartInitializingSingleton调用afterSingletonsInstantiated()方法。五、finishRefresh()遍历bean集合如果实现SmartLifecycle并且isAutoStartup()方法返回值为trueisRunning()方法返回值为false时调用其start()方法。
延伸阅读

更多相关文章

2026/11/4 1:33:37

Hermes Agent容器化部署终极指南:5分钟快速上手Docker Compose

Hermes Agent容器化部署终极指南:5分钟快速上手Docker Compose 你是否正在寻找一款能随着你的使用而不断成长的AI助手?Hermes Agent正是这样一个自我进化的智能代理系统。它不仅支持多种AI模型,还能跨平台运行,从Telegram、Disco…

2026/11/4 1:33:37

构建智能制造助手:Hermes Agent生产流程优化与质量控制全指南

构建智能制造助手:Hermes Agent生产流程优化与质量控制全指南 在当今工业4.0时代,智能制造正成为企业提升竞争力的核心驱动力。Hermes Agent作为一款强大的AI驱动自动化工具,能够通过智能流程优化和实时质量监控,帮助制造企业实现…

2026/11/4 1:33:37

DX9与硬件加速API简介

参考 DirectX 图形文章 DXGI Direct3D 入门 Direct3D 12 图形 Direct3D 11 图形 Direct3D 10 图形 Direct3D 9 参考 DirectX 图形和游戏 Microsoft媒体基础 window 显示驱动开发-视频内存管理和 GPU 计划 Microsoft媒体基础 DirectX 视频加速 2.0 DXVA 视频处理 mediafoundati…

2026/11/4 4:48:49

集线器与交换机区别及网络冲突域实验分析

1. 实验概述与网络设备基础认知作为一名网络工程师,我经常需要向新人解释集线器和交换机的本质区别。这次实验通过Cisco Packet Tracer模拟环境,直观展示了这两类设备在网络扩展中的不同表现。实验的核心价值在于:它不仅验证了教科书上的理论…

2026/11/4 4:48:49

金融推荐引擎Prompt设计:提升转化率21%的实战方案

1. 金融推荐引擎的Prompt设计实战在金融科技领域,推荐系统的精准度直接影响用户转化率。最近我们通过优化Prompt设计,将理财产品的购买转化率提升了21%,这个案例值得深入剖析。不同于通用推荐系统,金融产品推荐需要兼顾精准性、合…

2026/11/4 4:48:49

欧拉公式与数学符号革命:从图论到数论的开创性贡献

1. 欧拉的生平与时代背景18世纪是数学史上最辉煌的时期之一,而莱昂哈德欧拉(Leonhard Euler)无疑是这个时代最耀眼的明星。1707年出生于瑞士巴塞尔的欧拉,在数学、物理、天文学等多个领域都做出了开创性贡献。他的父亲是一位牧师&…

2026/11/4 4:48:49

汽油光谱分析中的PCA降维与机器学习建模实践

1. 汽油光谱分析的技术背景与挑战汽油作为现代工业社会最重要的能源产品之一,其质量检测和成分分析一直是石化行业的关键课题。传统化学分析方法如色谱法虽然准确,但存在耗时长、成本高、破坏样本等缺点。近红外光谱技术(NIR)因其…

2026/11/4 4:48:49

金融推荐引擎Prompt设计:风险匹配与合规优化

1. 金融推荐引擎的Prompt设计核心思路金融理财产品推荐不同于普通商品推荐,用户决策成本高、风险敏感性强。传统推荐系统往往只考虑"用户可能喜欢什么",而忽略了"用户应该买什么"这个更本质的金融决策需求。我们通过重构Prompt设计框…

2026/11/4 4:43:49

谷歌开源ARTEMIS:移动端AI自动化从原理到落地实践

移动端 AI 自动化这两年一直挂着“看着热闹、落地稀碎”的标签。手机上的日常操作,本质上就是“看屏幕、定计划、动手操作”,这跟 AI 智能体最擅长的“感知、决策、执行”几乎是一一对应的,可真的能让 AI 自己跑到手机里点按钮、滑页面、填表…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑