Spring Framework:按名称搜索属性

时间:2013-04-10 18:31:23

标签: spring

我有一个.properties文件。我可以根据需要将属性注入bean中。现在,我希望能够按名称搜索属性。

示例:

conf.properties:
a.persons=person1,person2,person3
a.gender=male

我可以使用注释注入这些属性。例如,

private @Value("${a.persons}") String[] persons

除此之外,我想搜索给出名字的属性的值,但我不知道如何去做。一个例子是:

properties.get("a.gender")

应返回字符串“male”。

这真的有可能吗?

更新:我使用了PropertyPlaceholderConfigurer,如下所示:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:META-INF/config/server.properties</value>
                <value>classpath:META-INF/config/ke/dev.properties</value>
            </list>
        </property>
    </bean>

我应该如何更改它以便我可以将它注入我的bean?我该如何访问这些属性?提前谢谢。

2 个答案:

答案 0 :(得分:1)

答案取决于您如何配置这些属性的注入。

  • 如果您使用PropertyPlaceholderConfigurer,则可以将Properties声明为bean,并将其PropertyPlaceholderConfigurer注入properties(而不是locations )。这样您也可以将Properties直接注入您的bean。

  • 如果您使用PropertySourcesPlaceholderConfigurer,则可以将Environment注入您的bean,并且可以通过它获取属性。

答案 1 :(得分:1)

根据@axtavt的建议,我创建了下面显示的bean,以帮助我搜索给定该属性名称的属性。我在我的解决方案中使用了@Environment和@PropertySource。我正在使用Spring 3.1,因此这个解决方案可能不适用于早期版本的Spring。

@Configuration
@PropertySource( "/META-INF/config/ke/dev.properties" )
@Service( value = "keConfigurer" )
public class ServiceConfiguration {

    @Autowired
    private Environment env;

    public Environment getEnv() {
        return env;
    }

    public void setEnv(Environment env) {
        this.env = env;
    }


}

我将此bean注入我希望使用它的任何其他类中。例如:

public class TestClass {

    @Autowired
    private ServiceConfiguration cfg;

    String testProp = cfg.getEnv().getProperty("prop.name");
}

我希望它可以帮助别人。