【问题标题】:PropertiesFactoryBean vs @PropertySourcePropertiesFactoryBean 与 @PropertySource
【发布时间】:2015-06-23 05:22:47
【问题描述】:

我只需要读取 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 有什么区别?

【问题讨论】:

  • 你试过@Autowired PropertiesFactoryBean pfb; 吗?
  • @user2893856 只是想知道它是否有帮助?

标签: java spring spring-mvc spring-annotations properties-file


【解决方案1】:

使用环境: Environment 为提供属性源提供了方便的接口。属性可以从 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");
...}
}

第三个选项

如果您要直接读取属性并且没有特定环境,我建议使用注册 PropertySourcesPlaceholderConfigurer 的&lt;context:property-placeholder&gt;

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

如果你声明如上,你可以使用@value注解直接读取值,如下所示。

public class MyServiceImpl{

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

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2015-07-28
    • 2016-07-21
    相关资源
    最近更新 更多