8.11! 从属性文件中读取列表并使用spring注释@Value加载| Java Debug 笔记

235 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

终于写到了三位数,现在基本人已经手脚发软了。

提问:从属性文件中读取列表并使用spring注释@Value加载

我想在.properties文件中放一个value列表,例如

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

并且将他们直接加载进我的类。

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

据我了解,执行此操作的另一种方法是将其保存在spring config文件中,并将其作为Bean引用加载(如果我说错了,请更正我),即

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

但是有什么其他办法吗? 使用.properties文件? ps:如果可能的话,我希望没有任何自定义代码。

回答1:

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

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

到您的applicationContext.xml(或您在其中配置的东西)

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

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

转换为其他类型的集合也可以:

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

可以成功的利用这行数据

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

那里的空格没有问题,ConversionServiceFactoryBean会处理它。

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