从属性文件中读取List并使用Spring注解@Value加载?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

类似于这个问题:http : //forum.springsource.org/showthread.php?111992-Loading-a-list-from-properties-file-using-Value-annotation

我想要一个.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:如果可能的话,我希望不用任何自定义代码。

提问于
用户回答回答于

使用Spring EL:

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

假设你的属性文件使用以下方法正确加载:

my.list.of.strings=ABC,CDE,EFG
用户回答回答于

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

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

到你的applicationContext.xml(或你配置的东西)。基于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实例。该转换服务将被Spring选中,然后在框架需要执行类型转换时使用。[...]如果没有使用Spring注册ConversionService,则使用原始的基于PropertyEditor的系统。

扫码关注云+社区