【问题标题】:Spring Framework: Search Properties by NameSpring Framework:按名称搜索属性
【发布时间】:2013-04-10 18:31:23
【问题描述】:

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

例子:

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

我可以通过使用注解来注入这些属性。例如,

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

除此之外,我还想搜索给定名称的属性的值,但我不知道该怎么做。一个例子是这样的:

properties.get("a.gender")

应该返回字符串“male”。

这真的可能吗?

UPDATE:我用过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 中?我将如何访问这些属性?提前致谢。

【问题讨论】:

    标签: spring


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢@axtavt。我会对此进行测试,然后告诉你我的发现。
    • 我的 Spring 配置中有上述内容(请参阅更新后的问题)。如图所示,我使用的是PropertyPlaceholderConfigurer(您的第一个建议)。我怎样才能改变它,以便我可以将它注入到我的 bean 中?我将如何访问这些属性。一个例子将不胜感激。
    • 根据您的建议,我想出了下面发布的解决方案作为答案,希望对其他人有所帮助。我接受您的回答,因为它为我节省了大量时间。
    【解决方案2】:

    根据@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");
    }
    

    我希望它可以帮助别人。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2022-01-11
      相关资源
      最近更新 更多