- Spring是否将所有属性放入同一个散列表中?**
- 如何获得Spring管理的所有属性的列表**
例如,如果我有两个属性文件,它们定义了重叠的属性
// FILE: src/main/resources/file1.properties
prop1.color = red
prop1.fill = green
// FILE: src/main/resources/file2.properties
prop2.color = purple
prop1.fill = ORANGE
用于告诉Spring读取这两个文件的配置类如下所示:
@PropertySource("classpath:file1.properties")
@PropertySource("classpath:file2.properties")
@Configuration
public class MyConfig {
}
- 我的问题是我可以得到一个迭代器来访问所有定义的属性吗?**如果可以,怎么做。
搜索答案
到目前为止我还没有找到这个问题的答案。
我在互联网上搜索了"堆栈溢出Spring属性",没有找到答案。
我发现的一些SO问题如下:
- Spring boot get all properties from properties file and load into hashmap
- Spring Boot application.properties
但他们没有回答我的问题
1条答案
按热度按时间dxxyhpgq1#
Spring提供了一个
PropertySources
接口,这个接口是由MutablePropertySources
类实现的,这个类基本上只是保存了一个PropertySource
示例的列表(例如PropertiesPropertySource
类的示例),并提供了迭代这些示例的方法。如果你看一下
MutablePropertySources
的实现,你会发现有多个方法可以在不同的位置添加PropertySource
示例,并且相对于列表中的其他PropertySource
。如果你想得到一个属性,MutablePropertySources
的get
方法会被调用,它会迭代所有PropertySource
,直到找到那个属性。还有
Environment
接口,它是由抽象类AbstractEnvironment
实现的,可以使用后者访问PropertySources
示例。例如,您可以执行以下操作:
您可以查看包含所有这些类的
org.springframework.core.env
包。为了更明确地回答你的第一个问题不,Spring不会把所有属性放到一个Map中,它会把不同位置的属性放到不同的
PropertySource
中,然后再添加到PropertySources
示例中。