我一直在搜索,但找不到这些步骤。我希望我遗漏了一些明显的东西。
我有一个包含以下内容的属性文件:
machines=A,B
我有另一个这样的文件,但在这个机器元素中有不同数量的成员:
machines=B,C,D
我的问题是如何以一般方式将这个可变长度的机器变量加载到我的spring配置中的bean中?
类似的东西:
<property name="machines" value="${machines}"/>
其中machines是我的java代码中的数组或列表。如果我能弄清楚如何做到这一点,我可以定义它。
基本上我宁愿让spring进行解析并将每个值都粘贴到list元素中,而不是我必须编写一些读取完整机器字符串并自己进行解析(使用逗号分隔符)来放置每个值到数组或列表。有没有一种简单的方法可以做到这一点,我错过了?
答案 0 :(得分:31)
您可能想看一下Spring的StringUtils类。它有许多有用的方法可以将逗号分隔列表转换为Set或String数组。您可以使用Spring的工厂方法框架将任何这些实用程序方法注入到bean中。这是一个例子:
<property name="machines">
<bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
<constructor-arg type="java.lang.String" value="${machines}"/>
</bean>
</property>
在此示例中,“machines”的值是从属性文件加载的。
如果现有的实用程序方法不能满足您的需求,那么创建自己的方法非常简单。此技术允许您执行任何静态实用程序方法。
答案 1 :(得分:19)
Spring EL变得更容易。 爪哇:
List <String> machines;
上下文:
<property name="machines" value="#{T(java.util.Arrays).asList('${machines}')}"/>
答案 2 :(得分:16)
如果你将属性“machines”作为一个String数组,那么spring会自动为你做
machines=B,C,D
<property name="machines" value="${machines}"/>
public void setMachines(String[] test) {
答案 3 :(得分:4)
从Spring 3.0开始,也可以使用@Value注释读入值列表。
属性文件:
machines=B,C,D
Java代码:
import org.springframework.beans.factory.annotation.Value;
@Value("#{'${machines}'.split(',')}")
private List<String> machines;
答案 4 :(得分:0)
您可以直接将值插入列表,而无需样板代码。(Spring 3.1 +)
@Value("${machines}")
private List<String> machines;
通过在配置中创建以下两个实例,在属性文件中的键“ machines = B,C,D”。
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public ConversionService conversionService() {
return new DefaultConversionService();
}
这些内容还将涵盖所有基于分离的拆分和空白修剪。