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

SpringBoot复习:(10)SpringApplication中的initializer成员变量是怎么初始化的?

initializers成员变量定义如下:
在这里插入图片描述

在构造方法里通过setInitializers
在这里插入图片描述
setInitializers的代码很简单:
在这里插入图片描述
其中的参数通过getSpringFactoriesInstances来获取的,该方法的代码如下:
在这里插入图片描述
其中调用的重载的方法代码如下:
在这里插入图片描述
它调用了SpringFactoriesLoader的静态方法loadFactoryNames方法,其代码如下:
在这里插入图片描述
它所调用的loadSpringFactories代码如下:

	private static Map<String, List<String>> loadSpringFactories(ClassLoader classLoader) {Map<String, List<String>> result = cache.get(classLoader);if (result != null) {return result;}result = new HashMap<>();try {Enumeration<URL> urls = classLoader.getResources(FACTORIES_RESOURCE_LOCATION);while (urls.hasMoreElements()) {URL url = urls.nextElement();UrlResource resource = new UrlResource(url);Properties properties = PropertiesLoaderUtils.loadProperties(resource);for (Map.Entry<?, ?> entry : properties.entrySet()) {String factoryTypeName = ((String) entry.getKey()).trim();String[] factoryImplementationNames =StringUtils.commaDelimitedListToStringArray((String) entry.getValue());for (String factoryImplementationName : factoryImplementationNames) {result.computeIfAbsent(factoryTypeName, key -> new ArrayList<>()).add(factoryImplementationName.trim());}}}// Replace all lists with unmodifiable lists containing unique elementsresult.replaceAll((factoryType, implementations) -> implementations.stream().distinct().collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)));cache.put(classLoader, result);}catch (IOException ex) {throw new IllegalArgumentException("Unable to load factories from location [" +FACTORIES_RESOURCE_LOCATION + "]", ex);}return result;}

其中包含如下代码片段:
在这里插入图片描述
FACTORIES_RESOURCE_LOCATION 常量值为 “META-INF/spring.factories”,该方法给调用者返回一个List,
然后接着往下执行:
在这里插入图片描述
createSpringFactoriesInstances通过反射生成factories对象实例,
在这里插入图片描述

然后这个方法返回一个List,最后setInitializers方法把这个List设置到SpringApplication的成员变量initializers
在这里插入图片描述

http://www.lryc.cn/news/110078.html

相关文章:

  • Java三大特征之继承【超详细】
  • python: lidar点云转BEV投影及pillar/voxel
  • 我的创作纪念日2023.8.5
  • 课程作业-基于Python实现的迷宫搜索游戏附源码
  • 差值结构的相互作用能
  • UI、UE、UX的区别
  • RabbitMQ 教程 | 第10章 网络分区
  • Flask学习笔记_异步论坛(四)
  • K8S系列文章之 kubeasz部署K8S环境
  • nodejs和vue的关系--vue3教程
  • 前端大屏尺寸实现自适应屏幕大小
  • leetcode 416. 分割等和子集
  • cesium加载三维模型3dtiles
  • el-select控制单选还是多选
  • nginx使用
  • 基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程
  • Linux|ubuntu下运行python
  • 使用FreeMarker导出word文档(支持导出图片)
  • C/C++中变量按位操作
  • uni、css——制作表格样式的模型
  • mac前端代码编辑 Sublime Text 4 Dev 中文v4.0(4151)
  • 面试之HashMap
  • promethues mysql-rules
  • Maven项目中Lifecycle和Plugins下的install的区别
  • 02-状态模式
  • Python异常处理中异常的种类有哪些?你知道几个?
  • COBOL语言介绍及使用场景
  • 【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(8 月 1 日论文合集)
  • Jetson nano 安装swapfile 解决Cannot allocate memory 问题
  • ElasticsSearch基础概念和安装