gpt4 book ai didi

java - PropertiesFactoryBean 与 @PropertySource

转载 作者:行者123 更新时间:2023-11-30 08:15:55 27 4
gpt4 key购买 nike

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

最佳答案

使用环境:环境提供了方便的接口(interface)来提供属性源。可以从 jvm 参数、系统变量、属性文件等加载属性。恕我直言,使用 env 提供了更好的抽象。

如果有一个选择,我更愿意 Environment因为它提供了更好的抽象。接口(interface)将保持不变,而不是明天从 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;
...}

}

关于java - PropertiesFactoryBean 与 @PropertySource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680894/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com