簡體   English   中英

PropertiesFactoryBean與@PropertySource

[英]PropertiesFactoryBean vs @PropertySource

我只需要在類MyServiceImpl.java中讀取menu.properties文件。這些值不是特定於環境的。

menu.properties
----------------
menu.option=option1,option2,option3

1)使用@PropertySource

@Configuration
@ComponentScan(basePackages = { "com.test.*" })
@PropertySource("classpath:menu.properties")
public class MyServiceImpl{

    @Autowired
    private Environment env;
    public List<String> createMenu(){
       String menuItems = env.getProperty("menu.option");
...}
}

2)如何在MyServiceImpl.java中訪問以下bean

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:menu.properties"/>
</bean>

我需要遵循哪種方法?PropertiesFactoryBean和PropertySource有什么區別?

使用環境:環境為提供屬性源提供了方便的界面。 可以從jvm args,系統變量,屬性文件等加載屬性。使用env可以提供更好的抽象恕我直言。

如果有選擇,我將更喜歡Environment因為它提供了更好的抽象。 明天您可以從jvm參數或系統變量加載屬性文件,而接口將保持不變。

為了回答您的第二個問題(我也提供了簡短形式)。

長表:

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:menu.properties"/>
</bean>

簡寫:

<util:properties id="properties" location="classpath:menu.properties"/>

public class MyServiceImpl{

    @Autowired
    private Properties properties;
    public List<String> createMenu(){
       String menuItems = properties.getProperty("menu.option");
...}
}

第三選擇

如果要直接讀取屬性,並且沒有特定於環境的信息,我建議使用<context:property-placeholder>來注冊PropertySourcesPlaceholderConfigurer。

<context:property-placeholder location="classpath:menu.properties" />

如果您如上所述聲明,則可以使用@value批注直接讀取值,如下所示。

public class MyServiceImpl{

    @value("${menu.option}")
    String menuItems;

    public List<String> createMenu(){
       //use items directly;
...}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM