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

55 浏览
0 Comments

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

我想在一个.properties文件中列出值的列表,例如:

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

并直接在我的类中加载它,例如:

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

据我所知,做这件事的另一种替代方法是将其放置在Spring配置文件中,并将其作为bean引用进行加载(如果我错了,请纠正我),例如

 
  ABC
  CDE
  EFG
 

但有没有什么方法可以做到这一点?使用.properties文件?

PS:如果可能,我想在没有任何自定义代码的情况下完成此操作。

admin 更改状态以发布 2023年5月24日
0
0 Comments

从Spring 3.0开始,您可以在applicationContext.xml(或您配置的地方)中添加以下内容:


如Dmitry Chornyi在评论中指出的那样,基于Java的配置如下:

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

这将启用新的配置服务,支持将String转换为Collection类型。
如果您没有激活此配置服务,Spring将使用其传统的属性编辑器作为配置服务,这些属性编辑器不支持此类转换。

将其他类型的值转换为集合也可以工作:

@Value("${my.list.of.ints}")
private List 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的系统将被使用。

0
0 Comments

使用Spring EL:

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

假设你的属性文件已被正确加载,其中包含以下内容:

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

0