Java 如何在Spring中定义字符串数组bean(使用XML配置)
我正在尝试定义一个类型为Java 如何在Spring中定义字符串数组bean(使用XML配置),java,spring,Java,Spring,我正在尝试定义一个类型为String[]的Springbean,现在可以找到一种方法来实现它。示例程序如下所示: @Component("sampleClass") public class SampleClass { @Value("#{someArrayId}") private String[] someArray; public void doWithArray() { System.out.println(Arrays.toString(som
String[]
的Springbean,现在可以找到一种方法来实现它。示例程序如下所示:
@Component("sampleClass")
public class SampleClass {
@Value("#{someArrayId}")
private String[] someArray;
public void doWithArray() {
System.out.println(Arrays.toString(someArray));
}
}
SpringXML配置
<context:annotation-config />
<context:component-scan base-package="com.demo.spring" />
<util:list id="someArrayId">
<array>
<value>Tiger</value>
<value>Lion</value>
</array>
</util:list>
我有点理解Spring在抱怨什么,但我不知道如何解决它
如果有人能帮忙,我将不胜感激
谢谢,NN我不知道这样做是否有原因,但是这个配置
<util:list id="someArrayId">
<array>
<value>Tiger</value>
<value>Lion</value>
</array>
</util:list>
在这种情况下,您可以修改要用注释的字段
@Value("#{someArrayId.toArray(new java.lang.String[0])}")
Spring的EL解析器将能够解析它并执行相应的方法,该方法将列表
转换为字符串[]
或者,删除@Value
注释并添加@Resource
注释方法
@Resource(name = "someArrayId")
private void init(List<String> bean) {
this.someArray = bean.toArray(new String[0]);
}
@Resource(name=“someArrayId”)
私有void init(列表bean){
this.someArray=bean.toArray(新字符串[0]);
}
我发现这种清洁剂更具描述性。像这样试试
@Component("sampleClass")
public class SampleClass {
@Value("#{someArrayId.toArray(new String[0])}")
private String[] someArray;
...
<util:list id="someArrayId">
<value>Tiger</value>
<value>Lion</value>
</util:list>
@组件(“sampleClass”)
公共类样本类{
@值(“#{someArrayId.toArray(新字符串[0])}”)
私有字符串[]数组;
...
老虎
狮子
只需定义数组,而不是列表
。您也可以将其作为配置注入,以减少歧义。这里需要注意的另一点是数组的值类型
<bean id="sampleClass" class="somePackage.SampleClass">
<property name="someArray">
<array value-type="java.lang.String">
<value>Tiger</value>
<value>Lion</value>
</array>
</property>
</bean>
老虎
狮子
很明显util:list
用于创建列表
。您正在尝试将其分配给字符串[]
。您真的需要数组吗?是的。我无法在此公开的实际用例需要数组。您好,首先感谢您的帮助;@Value(#{someArrayId.toArray(new java.lang.String[0]))
是正确答案。现在,我理解了您的@Resource观点,我将进行类似的更改。此线程现在可以关闭。非常感谢您的回答。这有助于节省我的时间。我现在可以关闭此线程。
@Component("sampleClass")
public class SampleClass {
@Value("#{someArrayId.toArray(new String[0])}")
private String[] someArray;
...
<util:list id="someArrayId">
<value>Tiger</value>
<value>Lion</value>
</util:list>
<bean id="sampleClass" class="somePackage.SampleClass">
<property name="someArray">
<array value-type="java.lang.String">
<value>Tiger</value>
<value>Lion</value>
</array>
</property>
</bean>