从属性文件中读取列表并使用弹簧注释加载@Value

2022-08-31 05:06:24

我想在.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:如果可能的话,我想用任何自定义代码来做到这一点。


答案 1

使用弹簧 EL:

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

假设您的属性文件已正确加载,如下所示:

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

答案 2

从Spring 3.0开始,你可以添加一行,比如

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

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

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

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

转换为其他类型的集合也会起作用:

@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容器(或AppplicationContext)配置一个Convertservice实例。该转换服务将由Spring拾取,然后在框架需要执行类型转换时使用。[...]如果没有在Spring注册转换服务,则使用原始的基于属性编辑器的系统。


推荐