首页 > 其他分享 >记录一次springboot启动流程不完整版

记录一次springboot启动流程不完整版

时间:2024-12-18 22:57:54浏览次数:10  
标签:load springboot sources 流程 environment source context 完整版 name

1.Sort ApplicationInitializer:

image

2.sort Listener:
image

3.getRunListener:
image

4.eventPublishingRunListener.starting 发布启动中事件;

构建 ApplicationArguments 参数,

4.1prepareEnvement:

[StubPropertySource {name='servletConfigInitParams'},

StubPropertySource {name='servletContextInitParams'},

PropertiesPropertySource {name='systemProperties'},

SystemEnvironmentPropertySource {name='systemEnvironment'}]

5.eventPublistRunlistener.environmentPrepared (环境变量) 发布环境已经准备好了的事件:

propertySources:[

ConfigurationPropertySourcesPropertySource {name='configurationProperties'},

StubPropertySource {name='servletConfigInitParams'},

StubPropertySource {name='servletContextInitParams'},

PropertiesPropertySource {name='systemProperties'},

SystemEnvironmentPropertySource {name='systemEnvironment'}]

最后返回的environment如下:

[ConfigurationPropertySourcesPropertySource {name='configurationProperties'},

MapPropertySource {name='bootstrap'},

PropertiesPropertySource {name='systemProperties'},

OriginAwareSystemEnvironmentPropertySource {name='systemEnvironment'}, RandomValuePropertySource {name='random'},

MapPropertySource {name='springCloudClientHostInfo'},

OriginTrackedMapPropertySource {name='applicationConfig: [classpath:/bootstrap.yml]'}]

6.创建ConfigurableApplicationContext ,这里只是通过构造函数创建一个基本对象

7.prepareContext 准备容器内容 ,入参(ConfigurableApplicationContext context, ConfigurableEnvironment environment, SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments, Banner printedBanner)

其中包括BootstrapImportSelectorConfiguration

image

这里重点是将spring.factories中的BootstrapConfiguration和环境中配置的spring.cloud.bootstrap.sources 进行合并,然后排序,然后返回。。相当于给容器中注入了bean![截屏2024-11-29 00.34.58]image

 protected void load(ApplicationContext context, Object[] sources) {
        if (logger.isDebugEnabled()) {
            logger.debug("Loading source " + StringUtils.arrayToCommaDelimitedString(sources));
        }

        BeanDefinitionLoader loader = this.createBeanDefinitionLoader(this.getBeanDefinitionRegistry(context), sources);
        if (this.beanNameGenerator != null) {
            loader.setBeanNameGenerator(this.beanNameGenerator);
        }

        if (this.resourceLoader != null) {
            loader.setResourceLoader(this.resourceLoader);
        }

        if (this.environment != null) {
            loader.setEnvironment(this.environment);
        }

        loader.load();
    }
private int load(Object source) {
        Assert.notNull(source, "Source must not be null");
        if (source instanceof Class) {
            return this.load((Class)source);
        } else if (source instanceof Resource) {
            return this.load((Resource)source);
        } else if (source instanceof Package) {
            return this.load((Package)source);
        } else if (source instanceof CharSequence) {
            return this.load((CharSequence)source);
        } else {
            throw new IllegalArgumentException("Invalid source type " + source.getClass());
        }
    }

根据不同的类型进行load,其中包括Class的register、Package 的scan 、Resource的loadBeanDefinitions;总之重写了很多的类型。

DefaultListableBeanFactory

标签:load,springboot,sources,流程,environment,source,context,完整版,name
From: https://www.cnblogs.com/euler-blog/p/18616019

相关文章

  • SUMO仿真流程
    你描述的流程已经很接近了SUMO和深度强化学习(DQN)结合的一个典型工作流程。我可以详细解释一下SUMO在仿真优化DQN模型时的具体步骤,以及一个Epoch是如何设置的。SUMO仿真与DQN模型结合流程初始化:你首先需要定义一个交通环境,通常使用SUMO来仿真。这个环境包括交通信......
  • 基于java的SpringBoot/SSM+Vue+uniapp的大学校园防疫与服务系统的详细设计和实现(源码
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • springboot毕设 疫情监控系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和数字媒体的普及,音乐已经成为人们日常生活中不可或缺的一部分。音乐网站作为数字音乐传播的重要平台,不仅提供了丰富的音乐......
  • springboot毕设 音乐网站 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和数字媒体的普及,音乐已经成为人们日常生活中不可或缺的一部分。音乐网站作为数字音乐传播的重要平台,不仅提供了丰富的音乐......
  • 跨链的基本流程和操作详解
    随着区块链技术的发展,越来越多的链(如以太坊、BSC、Solana等)开始承载各类去中心化应用(DApps)。然而,不同链之间的隔离性成为了阻碍生态协作的一大问题。在这种背景下,跨链桥作为连接不同链的重要工具,变得至关重要。本篇文章将详细介绍跨链的基本流程和操作。跨链的基本概念跨链是......
  • Java基于springboot+vue的摄影设备租赁管理系统
    收藏关注不迷路!!......
  • 基于SpringBoot的二手车交易系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
    专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。主要内容:免费功能设计、开题报告、任务书、中......
  • springboot毕设 农产品交易平台app程序+论文
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和移动互联网的普及,电子商务已经成为现代商业的重要组成部分。在农产品领域,传统的销售模式面临着信息不对称、流通效率低、交易成本高等诸多挑战。为了应对这些挑战,构建一个农产品交易平台APP显得尤为重要。该......
  • springboot毕设 垃圾分类回收系统的设计与实现程序+论文
    系统程序文件列表开题报告内容研究背景随着城市化进程的加速,垃圾产生量急剧增加,垃圾分类成为解决环境问题、促进资源循环利用的重要手段。然而,当前垃圾分类工作仍面临诸多挑战,如公众分类意识不足、分类知识缺乏、分类设施不完善等。因此,设计并实现一个高效、便捷的垃圾分类......
  • 如何选择最适合的业务流程管理软件?11款推荐帮你高效决策
    20世纪90年代,全球化竞争愈演愈烈,IBM信贷公司面临着前所未有的挑战,融资申请流程低效且复杂:每笔平均需要168小时——整整一周!这在瞬息万变的商业环境中,简直是客户体验的“灾难”,更别提对于业务增长的限制了。就在这个关键节点,IBM果断采取行动,掀起了一场声势浩大的业务流程再造(BPR)改......