Spring 3.2属性文件读取动态属性名称(不自动注入)

时间:2014-10-06 16:38:43

标签: java spring properties

我正在使用 Spring 3.2 并添加了一个属性文件,我可以将其用于将值注入java类变量。

*<bean id="serverProperties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:mysetof.properties</value>
        </list>
    </property>
    <property name="placeholderPrefix" value="$server{" />
    <property name="ignoreResourceNotFound" value="false" />
    <property name="ignoreUnresolvablePlaceholders" value="false" />
</bean>*

*@Value("#{$server{default.myproperty}}")
private double defaultMyProperty*

但是我有一些我需要动态访问的属性。

如何访问这些属性?我使用了env变量

*/** Spring var - used for accessing properties. */
@Autowired
private Environment env;* 

但是当我尝试执行以下操作时,我会返回null值:

propertyValue = env.getProperty("default.myproperty");

直接访问属性值而不是自动注入属性值的最佳方法是什么。

这些属性可能存在也可能不存在,并且可能存在大量属性,因此我不希望使用自动注入,因为这将涉及设置大量变量。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以在CustomResourceBundleMessageSource中尝试使用applicationContext.xml,如下所示 我在core-messageSource bean中配置了messages.properties文件,在messageSource bean中配置了application-messages.properties文件

<bean id="core-messageSource"
        class="com.datacert.core.spring.CustomResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>messages</value>
            </list>
        </property>
</bean>

<bean id="messageSource"
        class="com.datacert.core.spring.CustomResourceBundleMessageSource">
        <property name="parentMessageSource">
            <ref bean="core-messageSource"/>
        </property>
        <property name="basenames">
            <list>
                <value>application-messages</value>
            </list>
        </property>
</bean>

然后在你的bean中你可以按照下面的方式执行

//I have security.cookie.timeout = 10 in my properties file
ResourceBundleMessageSource bean = new ResourceBundleMessageSource();
bean.setBasename("application-messages");
String message = bean.getMessage("security.cookie.timeout", null, Locale.getDefault());
System.out.println("message = "+message)//will print message = 10