返回顶部
首页 > 资讯 > 精选 >SpringBoot属性文件加载原理是什么
  • 249
分享到

SpringBoot属性文件加载原理是什么

2023-06-29 02:06:57 249人浏览 薄情痞子
摘要

本篇内容介绍了“SpringBoot属性文件加载原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言首先我们来看一个问题。就是我们在

本篇内容介绍了“SpringBoot属性文件加载原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    前言

    首先我们来看一个问题。就是我们在创建springBoot项目的时候会在对应的application.properties或者application.yml文件中添加对应的属性信息,我们的问题是这些属性文件是什么时候被加载的?如果要实现自定义的属性文件怎么来实现呢?本文来给大家揭晓答案:

    SpringBoot属性文件加载原理是什么

    1.找到入口

    结合我们前面介绍的SpringBoot中的监听事件机制,我们首先看下SpringApplication.run()方法,在该方法中会针对SpringBoot项目启动的不同的阶段来发布对应的事件。

    SpringBoot属性文件加载原理是什么

    处理属性文件加载解析的监听器是 ConfigFileApplicationListener ,这个监听器监听的事件有两个。

    SpringBoot属性文件加载原理是什么

    而我们进入SpringApplication.prepareEnvironment()方法中发布的事件其实就是ApplicationEnvironmentPreparedEvent事件。进入代码查看。

    SpringBoot属性文件加载原理是什么

    进行进入

    SpringBoot属性文件加载原理是什么

    继续进入会看到对应的发布事件:ApplicationEnvironmentPreparedEvent

    SpringBoot属性文件加载原理是什么

    结合上篇文件的内容,我们知道在initialMulticaster中是有ConfigFileApplicationListener这个监听器的。

    SpringBoot属性文件加载原理是什么

    那么在此处触发了配置环境的监听器,后续的逻辑就应该进入对应的

    2.ConfigFileApplicationListener

    2.1 主要流程分析

    接下来我们看下ConfigFileApplicationListener中具体的如何来处理配置文件的加载解析的。

    SpringBoot属性文件加载原理是什么

    根据逻辑我们直接进入onApplicationEnvironmentPreparedEvent()方法中。

    SpringBoot属性文件加载原理是什么

    系统提供那4个不是重点,重点是 ConfigFileApplicationListener 中的这个方法处理.

    SpringBoot属性文件加载原理是什么

    直接进入ConfigFileApplicationListener.postProcessEnvironment()方法。

    SpringBoot属性文件加载原理是什么

    在进入addPropertySources()方法中会完成两个核心操作,1。创建Loader对象,2。调用Loader对象的load方法,

    SpringBoot属性文件加载原理是什么

    2.2 Loader构造器

    现在我们来看下在Loader构造器中执行了什么操作。

    SpringBoot属性文件加载原理是什么

    通过源码我们可以发现在其中获取到了属性文件的加载器、从spring.factories文件中获取,对应的类型是 PropertySourceLoader类型。

    SpringBoot属性文件加载原理是什么

    而且在loadFactories方法中会完成对象的实例化。

    SpringBoot属性文件加载原理是什么

    到这Loader的构造方法执行完成了,然后来看下load()方法的执行。先把代码贴上

    void load() {FilteredPropertySource.apply(this.environment, DEFAULT_PROPERTIES, LOAD_FILTERED_PROPERTY,(defaultProperties) -> {// 创建默认的profile 链表this.profiles = new LinkedList<>();// 创建已经处理过的profile 类别this.processedProfiles = new LinkedList<>();// 默认设置为未激活this.activatedProfiles = false;// 创建loaded对象this.loaded = new LinkedHashMap<>();// 加载配置 profile 的信息,默认为 defaultinitializeProfiles();// 遍历 Profiles,并加载解析while (!this.profiles.isEmpty()) {// 从双向链表中获取一个profile对象Profile profile = this.profiles.poll();// 非默认的就加入,进去看源码即可清楚if (isDefaultProfile(profile)) {addProfileToEnvironment(profile.getName());}load(profile, this::getPositiveProfileFilter,addToLoaded(MutablePropertySources::addLast, false));this.processedProfiles.add(profile);}// 解析 profileload(null, this::getNegativeProfileFilter, addToLoaded(MutablePropertySources::addFirst, true));// 加载默认的属性文件 application.propertiesaddLoadedPropertySources();applyActiveProfiles(defaultProperties);});}

    然后我们进入具体的apply()方法中来查看。

    SpringBoot属性文件加载原理是什么

    中间的代码都有注释,主要是处理profile的内容。

    SpringBoot属性文件加载原理是什么

    首先是getSearchLocations()方法,在该方法中会查询默认的会存放对应的配置文件的位置,如果没有自定义的话,路径就是 file:./config/ file:./ classpath:/config/ classpath:/ 这4个

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    然后回到load方法中,遍历4个路径,然后加载对应的属性文件。

    SpringBoot属性文件加载原理是什么

    getSearchNames()获取的是属性文件的名称。如果自定义了就加载自定义的

    SpringBoot属性文件加载原理是什么

    否则加载默认的application文件。

    SpringBoot属性文件加载原理是什么

    再回到前面的方法

    SpringBoot属性文件加载原理是什么

    进入load方法,会通过前面的两个加载器来分别加载application.properties和application.yml的文件。

    SpringBoot属性文件加载原理是什么

    loader.getFileExtensions()获取对应的加载的文件的后缀。

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    进入loadForFileExtension()方法,对profile和普通配置分别加载

    SpringBoot属性文件加载原理是什么

    继续进入load方法

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    开始加载我们存在的application.properties文件。

    2.3 properties加载

    在找到了要加载的文件的名称和路径后,我们来看下资源加载器是如何来加载具体的文件信息的。

    SpringBoot属性文件加载原理是什么

    进入loadDocuments方法中,我们会发现会先从缓存中查找,如果缓存中没有则会通过对应的资源加载器来加载了。

    SpringBoot属性文件加载原理是什么

    此处是PropertiesPropertySourceLoader来加载的。

    SpringBoot属性文件加载原理是什么

    SpringBoot属性文件加载原理是什么

    进入loadProperties方法

    SpringBoot属性文件加载原理是什么

    之后进入load()方法看到的就是具体的加载解析properties文件中的内容了。感兴趣的可以看下具体的逻辑,本文就给大家介绍到这里了。

    SpringBoot属性文件加载原理是什么

    “SpringBoot属性文件加载原理是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: SpringBoot属性文件加载原理是什么

    本文链接: https://lsjlt.com/news/322095.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • SpringBoot属性文件加载原理是什么
      本篇内容介绍了“SpringBoot属性文件加载原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言首先我们来看一个问题。就是我们在...
      99+
      2023-06-29
    • SpringBoot源码剖析之属性文件加载原理
      目录前言1.找到入口2.ConfigFileApplicationListener2.1 主要流程分析2.2 Loader构造器2.3 properties加载总结 前言 ...
      99+
      2024-04-02
    • SpringBoot中bootstrap.properties文件加载的原理是什么
      这篇文章主要介绍“SpringBoot中bootstrap.properties文件加载的原理是什么”,在日常操作中,相信很多人在SpringBoot中bootstrap.properties文件加载的原理是什么问题上存在疑惑,小编查阅了各...
      99+
      2023-06-22
    • JVM加载class文件的原理机制是什么
      今天小编给大家分享一下JVM加载class文件的原理机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、JVM简介J...
      99+
      2023-06-30
    • SpringBoot源码分析之bootstrap.properties文件加载的原理
      目录1.bootstrap的使用2.bootstrap加载原理分析2.1 BootstrapApplicationListener2.2 启动流程梳理2.3 bootstrap.pr...
      99+
      2024-04-02
    • springboot怎么加载so文件
      在Spring Boot中加载.so文件,可以按照以下步骤进行操作: 将.so文件放置在项目的某个目录下,比如`src/main...
      99+
      2023-10-25
      springboot
    • require加载器的原理是什么
      这篇文章给大家介绍require加载器的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.node模块化的实现node中是自带模块化机制的,每个文件就是一个单独的模块,并且它遵循的是CommonJS规范,也就...
      99+
      2023-06-14
    • unity异步加载原理是什么
      Unity的异步加载原理是利用协程(Coroutine)和异步操作(AsyncOperation)来实现的。在Unity中,协程是一...
      99+
      2023-09-29
      unity
    • JavaScript中延迟加载属性的原理和用法
      本篇内容介绍了“JavaScript中延迟加载属性的原理和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
      99+
      2024-04-02
    • webpack的异步加载原理是什么
      这篇文章主要讲解了“webpack的异步加载原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“webpack的异步加载原理是什么”吧!webpack ...
      99+
      2024-04-02
    • Spring加载属性文件方式(自动加载优先级问题)
      目录Spring加载属性文件方式1、用xml文件配置方式2、用注解对Spring加载顺序的理解web.xml初始化spring加载流程Spring加载属性文件 方式1、用xml文件配...
      99+
      2024-04-02
    • springboot配置文件中属性变量引用的方式是什么
      本文小编为大家详细介绍“springboot配置文件中属性变量引用的方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot配置文件中属性变量引用的方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
      99+
      2023-07-05
    • java懒加载的实现原理是什么
      Java的懒加载(Lazy Loading)是一种延迟加载的策略,即在需要使用某个对象时才进行实例化和初始化,在之前不会占用额外的资...
      99+
      2023-09-14
      java
    • android硬件加速原理是什么
      Android硬件加速是指利用设备硬件来加快图形渲染和图像处理的过程,从而提高应用程序的性能和用户体验。Android硬件加速的原理...
      99+
      2023-10-11
      android
    • SpringBoot配置文件中密码属性加密的实现
      目录背景集成jasypt-spring-boot到项目中配置文件配置加密与读取工作原理简析使用自定义的加密算法结语本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,...
      99+
      2024-04-02
    • php加载文件的方法是什么
      这篇文章主要介绍php加载文件的方法是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php加载文件的方法:1、使用“include '文件名'”语句加载;2、使用“require '文件名...
      99+
      2023-06-15
    • SpringBoot配置加载顺序是什么
      Spring Boot的配置加载顺序如下:1. 首先,加载`application.properties`文件中的配置,这是默认的配...
      99+
      2023-10-07
      SpringBoot
    • CSS文本属性是什么
      这篇文章主要介绍CSS文本属性是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 属性 描写 CSS color 设置文本的色调。 ...
      99+
      2024-04-02
    • SpringBoot上传和下载文件的原理解析
      技术概述 我们的项目是实现一个论坛。在论坛上发布博客时应该要可以上传文件,用户阅读博客是应该要可以下载文件。于是我去学习了SpringBoot的上传和下载文件,我感觉技术的难点在于使...
      99+
      2024-04-02
    • Spring注解@Value及属性加载配置文件方式
      Spring中使用@Value注解给bean加载属性的配置文件有两种使用方式 第一种:使用@Value("#{configProperties['websit.msgname']}"...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作