将动态属性列表读入spring托管bean

bob*_*bob 27 spring dynamic javabeans

我一直在寻找,但找不到这些步骤.我希望我遗漏了一些明显的东西.

我有一个属性文件,其中包含以下内容:

machines=A,B
Run Code Online (Sandbox Code Playgroud)

我有另一个这样的文件,但在这个机器元素中有不同数量的成员,如下所示:

machines=B,C,D
Run Code Online (Sandbox Code Playgroud)

我的问题是如何以通用的方式将这个可变长度的机器变量加载到我的spring配置中的bean中?

这样的事情:

<property name="machines" value="${machines}"/>
Run Code Online (Sandbox Code Playgroud)

其中machines是我的java代码中的数组或列表.我可以定义它,但我想知道如果我能弄清楚如何做到这一点.

基本上我宁愿让spring进行解析并将每个值粘贴到一个列表元素中,而不是我必须编写一些读取完整机器字符串的东西并自己进行解析(使用逗号分隔符)将每个值放入一个数组中或列表.有没有一种简单的方法可以做到这一点,我错过了?

Kri*_*bic 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>
Run Code Online (Sandbox Code Playgroud)

在此示例中,'machines'的值是从属性文件加载的.

如果现有的实用程序方法不能满足您的需求,那么创建自己的方法非常简单.此技术允许您执行任何静态实用程序方法.


小智 19

Spring EL变得更容易.Java的:

List <String> machines;
Run Code Online (Sandbox Code Playgroud)

语境:

<property name="machines" value="#{T(java.util.Arrays).asList('${machines}')}"/>
Run Code Online (Sandbox Code Playgroud)


Sim*_*bbs 16

如果您将属性"machines"设置为String数组,那么spring将自动为您执行此操作

machines=B,C,D

<property name="machines" value="${machines}"/>

public void setMachines(String[] test) {
Run Code Online (Sandbox Code Playgroud)