2013-01-03 58 views
4

通常,当我知道属性名称,像这样我会用注释填充字段:循环通过文件中的所有属性,弹簧和Java

@Value("${myproperties.myValue}") 
private String myString 

但是我现在要遍历所有属性在文件中,当他们的名字是未知的,并且存储有价值和名字。用spring和java什么是最好的方法?

回答

30

其实,如果你只需要从文件中读取性能,而不是在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" /> 
+0

不错!看起来很简单... – NimChimpsky

+1

谢谢!请注意,您需要导入'java.util.Map.Entry'才能正常工作 - 我是Java新手,并没有意识到这一点 – KolaB

1

@Value机制通过PropertyPlaceholderConfigurer工作,而这又是BeanFactoryPostProcessor。它使用的属性在运行时不会公开。有关可能的解决方案,请参阅this previous answer of mine

1

我找不到比这

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> 
+0

THX,但我会如何访问实际的属性值,并且名字? – NimChimpsky

+0

添加Test1.printProps为例 –