2013-04-10 128 views
2

我有一個.properties文件。我可以根據需要將屬性注入到bean中。現在,我希望能夠按名稱搜索房產。Spring框架:按名稱搜索屬性

實施例:

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

我可以通過使用註解注入這些屬性。例如,

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

除了這個,我想搜索一個名稱的屬性的值,但我不知道如何去做。一個例子是這樣的:

properties.get("a.gender") 

這應該返回字符串「男性」。

這真的有可能嗎?

更新:我已經使用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> 

我應該如何改變這種做法,我可以把它注射到我的豆?我將如何訪問這些屬性?提前致謝。

回答

1

答案取決於你如何配置注入這些屬性。

  • 如果使用PropertyPlaceholderConfigurer,你可以宣佈你的Properties爲一個bean並注入到PropertyPlaceholderConfigurerproperties(而不是locations)。這樣你也可以直接將你的Properties注入到你的bean中。

  • 如果您使用PropertySourcesPlaceholderConfigurer,則可以將Environment注入到bean中,並且通過它可以使用屬性。

+0

非常感謝@axtavt。我會測試一下,讓你知道我的發現。 – okello 2013-04-11 03:24:59

+0

我在我的Spring配置中有上面的內容(請參閱更新後的問題)。如圖所示,我正在使用'PropertyPlaceholderConfigurer'(您的第一個建議)。我怎樣才能改變這個,以便我可以將它注入到我的bean中?我將如何訪問屬性。非常感謝一個例子。 – okello 2013-04-11 04:44:33

+0

按照你的建議,我提出了下面發佈的解決方案作爲答案,希望它能幫助別人。我接受你的回答,因爲它爲我節省了大量的時間。 – okello 2013-04-11 07:03:12

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

我希望它可以幫助別人。