通常,当我知道属性名称,像这样我会用注释填充字段:循环通过文件中的所有属性,弹簧和Java
@Value("${myproperties.myValue}")
private String myString
但是我现在要遍历所有属性在文件中,当他们的名字是未知的,并且存储有价值和名字。用spring和java什么是最好的方法?
通常,当我知道属性名称,像这样我会用注释填充字段:循环通过文件中的所有属性,弹簧和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" />
@Value
机制通过PropertyPlaceholderConfigurer
工作,而这又是BeanFactoryPostProcessor
。它使用的属性在运行时不会公开。有关可能的解决方案,请参阅this previous answer of mine。
我找不到比这
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>
THX,但我会如何访问实际的属性值,并且名字? – NimChimpsky
添加Test1.printProps为例 –
不错!看起来很简单... – NimChimpsky
谢谢!请注意,您需要导入'java.util.Map.Entry'才能正常工作 - 我是Java新手,并没有意识到这一点 – KolaB