从属性文件中读取List并使用Spring注解@Value加载
类似于这个问题: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
(或你配置的地方)。 正如Dmitry Chornyi在评论中指出的那样,基于Java的配置看起来像:
@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
会照顾它。
请参阅http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert-Spring-config
在Spring应用程序中,您通常为每个Spring容器(或ApplicationContext)配置一个ConversionService实例。 该转换服务将被Spring接收,然后在框架需要执行类型转换时使用。 [...]如果没有使用Spring注册ConversionService,则使用原始的基于PropertyEditor的系统。
你是否考虑过在构造函数或setter和String.split()
中使用@Autowired
?
class MyClass {
private List<String> myList;
@Autowired
public MyClass(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
//or
@Autowired
public void setMyList(@Value("${my.list.of.strings}") final String strs) {
myList = Arrays.asList(strs.split(","));
}
}
我倾向于使用这些方法之一来进行自动装配,以增强我的代码的可测试性。
链接地址: http://www.djcxy.com/p/50903.html上一篇: Reading a List from properties file and load with spring annotation @Value