通常,当我知道属性名称时,我会使用注释填充字段,如下所示:
@Value("${myproperties.myValue}")
private String myString
但是,我现在想遍历文件中的所有属性,当它们的名称未知时,并在那里存储值和名称。spring 和 java 的最佳方法是什么?
通常,当我知道属性名称时,我会使用注释填充字段,如下所示:
@Value("${myproperties.myValue}")
private String myString
但是,我现在想遍历文件中的所有属性,当它们的名称未知时,并在那里存储值和名称。spring 和 java 的最佳方法是什么?
实际上,如果您只需要从文件中读取属性而不需要在 Spring 的属性占位符中使用这些属性,那么解决方案很简单
public class Test1 {
@Autowired
Properties props;
public void printProps() {
for(Entry<Object, Object> e : props.entrySet()) {
System.out.println(e);
}
}
...
<util:properties id="props" location="/spring.properties" />
我找不到比这更简单的解决方案
class PropertyPlaceholder extends PropertyPlaceholderConfigurer {
Properties props;
@Override
protected Properties mergeProperties() throws IOException {
props = super.mergeProperties();
return props;
}
}
public class Test1 {
@Autowired
PropertyPlaceholder pph;
public void printProps() {
for(Entry<Object, Object> e : pph.props.entrySet()) {
System.out.println(e);
}
}
...
...
<bean class="test.PropertyPlaceholder">
<property name="locations">
<value>/app.properties</value>
</property>
</bean>
该@Value
机制通过PropertyPlaceholderConfigurer
which 又是 a起作用BeanFactoryPostProcessor
。它使用的属性不会在运行时公开。请参阅我以前的答案以获得可能的解决方案。