构造函数中如何读取配置文件_Spring中的配置文件的读取

本文介绍了Spring中如何读取和解析配置文件,重点讲解了PropertySourcesPlaceholderConfigurer的作用。从Spring 3.1开始,该类用于解析${}占位符。内容涉及YamlPropertySourceLoader、YamlProcessor、PropertySourcesPropertyValues和PropertySourcesPropertyResolver等组件的工作流程,详细阐述了配置文件数据如何转化为key-value形式并最终解析出占位符的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在spring的xml配置文件或@Value注解中,我们经常看到${}符合表示的属性值,那么它们是如何被解析到的呢?

这里我们就要先谈一下PropertySourcesPlaceholderConfigurer类了。在spring的注释中,有关于这个类的说明。从Spring 3.1开始,优先使用PropertySourcesPlaceholderConfigurer解析,在Spring 3.1之前,使用了PropertyPlaceholderConfigurer解析。

在YamlPropertySourceLoader的load方法中,会调用YamlProcessor的process(),在process中会调用getFlattenedMap()方法,这里会进行解析。将数据解析成key,value的形式,存放在Properties中。接着调用matches(Properties properties)方法,会调用propertySources.addFirst()将配置文件数据信息存放在propertySources中。

3bd8980be6671b435869de419df6d650.png

然后调用new PropertySourcesPropertyValues(propertySources)将配置文件数据传递到PropertySourcesPropertyValues对象中。

53d6b06322fffd297a6e99044a716569.png

在PropertySourcesPropertyValues中又会通过new PropertySourcesPropertyResolver(propertySources)将propertySources传递给PropertySourcesPropertyResolver对象中,接着调用processPropertySource(source, resolver);来获取所有的key的值。

bc3bd848fb8f770e96fcb8f6c73e886f.png

这里会先获取所有的key,然后循环去调用PropertySourcesPropertyResolver的getProperty()方法。

edef1258cd5c80b14581bca623b7bbd0.png

由于前面已经将propertySouces的值传递到PropertySourcesPropertyResolver对象了,因此这里就可以获取到key对应的value。这里还会进行嵌套占位符的处理。也就是调用resolveNestedPlaceholders()方法。如果配置文件里的value中也有${}这样的形式,那么就会调用resolveNestedPlaceholders()。

ed7add43d731a84fea384eb1f5a9c465.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值