为了账号安全,请及时绑定邮箱和手机立即绑定

从属性文件中读取List并使用spring注释加载@Value

/ 猿问

从属性文件中读取List并使用spring注释加载@Value

莫回无 2019-07-25 19:55:30

从属性文件中读取List并使用spring注释加载@Value

我想在.properties文件中有一个值列表,即:

my.list.of.strings=ABC,CDE,EFG

并直接加载到我的班级,即:

@Value("${my.list.of.strings}")private List<String> myList;

据我所知,这样做的另一种方法是将它放在spring配置文件中,并将其作为bean引用加载(如果我错了,请纠正我),即

<bean name="list">
 <list>
  <value>ABC</value>
  <value>CDE</value>
  <value>EFG</value>
 </list></bean>

但有没有办法做到这一点?使用.properties文件?ps:如果可能的话,我想用任何自定义代码执行此操作。


查看完整描述

3 回答

?
白衣染霜花

使用Spring EL:

@Value("#{'${my.list.of.strings}'.split(',')}") private List<String> myList;

假设您的属性文件已正确加载以下内容:

my.list.of.strings=ABC,CDE,EFG


查看完整回答
反对 回复 2019-07-25
?
一只名叫tom的猫

从Spring 3.0开始,您可以添加一行

<bean id="conversionService" 
    class="org.springframework.context.support.ConversionServiceFactoryBean" />

到你的applicationContext.xml(或你配置的东西)。正如Dmitry Chornyi在评论中指出的那样,基于Java的配置如下所示:

@Bean public ConversionService conversionService() {
    return new DefaultConversionService();}

这将激活支持转换StringCollection类型的新配置服务。如果您不激活此配置服务,Spring会将其旧版属性编辑器作为配置服务,这些服务不支持此类转换。

转换为其他类型的集合也是有效的:

@Value("${my.list.of.ints}")private List<Integer> myList

会像一条线一样工作

 my.list.of.ints= 1, 2, 3, 4

没有空白问题,ConversionServiceFactoryBean照顾它。

请参阅http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert-Spring-config

在Spring应用程序中,通常为每个Spring容器(或ApplicationContext)配置一个ConversionService实例。那个ConversionService将被Spring选中,然后在框架需要执行类型转换时使用。[...]如果没有向Spring注册ConversionService,则使用原始的基于PropertyEditor的系统。


查看完整回答
反对 回复 2019-07-25
?
慕后森

通过指定my.list.of.strings=ABC,CDE,EFG.properties文件并使用

@Value("${my.list.of.strings}") private String[] myString;

您可以获取字符串数组。使用CollectionUtils.addAll(myList, myString),你可以得到字符串列表。


查看完整回答
反对 回复 2019-07-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信