5

通常,当我知道属性名称时,我会使用注释填充字段,如下所示:

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

但是,我现在想遍历文件中的所有属性,当它们的名称未知时,并在那里存储值和名称。spring 和 java 的最佳方法是什么?

4

4 回答 4

33

实际上,如果您只需要从文件中读取属性而不需要在 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" />
于 2013-01-03T10:29:01.390 回答
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>
于 2013-01-03T10:05:17.937 回答
1

@Value机制通过PropertyPlaceholderConfigurerwhich 又是 a起作用BeanFactoryPostProcessor。它使用的属性不会在运行时公开。请参阅我以前的答案以获得可能的解决方案。

于 2013-01-03T09:41:57.320 回答
-1

使用枚举循环遍历属性

于 2016-04-12T22:33:26.963 回答