我想在.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:如果可能的话,我想这样做没有任何自定义代码。
注意值中的空格。我可能错了,但我认为逗号分隔列表中的空格没有使用@Value和Spel截断。列表
foobar=a, b, c
会被读入一个字符串列表吗
"a", " b", " c"
在大多数情况下,您可能不想要空格!
表达式
@Value("#{'${foobar}'.trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}")
private List<String> foobarList;
会给你一个字符串列表
"a", "b", "c".
正则表达式删除逗号前面和后面的所有空格。值中的空格不会被删除。所以
foobar = AA, B B, CCC
应该得到的值
"AA", "B B", "CCC".
如果你使用的是最新的Spring框架版本(我相信是Spring 3.1+),你不需要在SpringEL中进行字符串分割,
简单地添加PropertySourcesPlaceholderConfigurer和DefaultConversionService在你的Spring的配置类(一个与配置注释),例如:
@Configuration
public class AppConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean public ConversionService conversionService() {
return new DefaultConversionService();
}
}
在你的课堂上
@Value("${list}")
private List<String> list;
在属性文件中
list=A,B,C,D,E
如果没有DefaultConversionService,当您将值注入字段时,您只能将逗号分隔的字符串放入字符串数组中,但是DefaultConversionService为您做了一些方便的魔术,并将它们添加到Collection, array等(如果您想了解更多,请检查实现)。
有了这两个,它甚至可以处理包括换行符在内的所有多余的空白,因此您不需要添加额外的逻辑来修剪它们。