[英]propertiesfactorybean vs propertyplaceholderconfigurer spring?
[英]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.