我是Spring Framework的新手。我正在尝试使用spring合并两个集合。 beans.xml中
<bean name = "mainAccount" class="java.util.HashSet">
<constructor-arg>
<set>
<value>123</value>
<value>1234</value>
</set>
</constructor-arg>
</bean>
<bean name = "subAccount" class="java.util.HashSet" parent="mainAccount">
<constructor-arg>
<set merge="true">
<value>231</value>
<value>23221</value>
</set>
</constructor-arg>
</bean>
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<constructor-arg name="AccountIDs" ref="subAccount" />
</bean>
我无法将这些集合并到subAccount集合中。 我得到了例外: -
相关原因: org.springframework.beans.factory.UnsatisfiedDependencyException:在类路径资源[Beans.xml]中定义名称为'subAccount'的bean时出错:通过构造函数参数表达的不满意的依赖关系,类型为[int]的索引0:无法转换构造函数参数值类型为[java.util.LinkedHashSet]的类型为[int]:无法将类型'java.util.LinkedHashSet'的值转换为必需的类型'int';嵌套异常是java.lang.IllegalArgumentException:无法将类型[java.util.LinkedHashSet]的值转换为必需的类型[int]:PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor]返回类型[java.util。 LinkedHashSet]
我的HelloWorld.java是: -
package com.tutorialspoint;
import java.util.HashSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
public class HelloWorld {
private final Set<String>AccountIDs;
public HelloWorld(Collection<String> AccountIDs){
this.AccountIDs = new HashSet<String>(AccountIDs);
Iterator iterator = AccountIDs.iterator();
while (iterator.hasNext())
System.out.print( iterator.next() + ", " );
System.out.println();
}
}
当我传递父bean设置“mainAccount”然后它正确地显示设置值但是当我尝试传递子bean“subAccount”时我得到了错误。我想将mainAccount合并到subAcount.I尝试了所有可能的方法,但无法解决这个问题。一些指导会有所帮助。
答案 0 :(得分:1)
我看到的问题是,您尝试合并集合的方式。您正在创建集合的实例,并希望在构造集合期间进行合并。
Spring合并的工作原理是,你必须定义你自己的bean(Parent),其属性为collection,设置属性名称为mySet,然后你可以用相同的属性名定义你的子bean并声明set& #39; s merge属性为true。那是春天会明白哪个集合与什么合并。
您可以按照以下网址查看其完成情况
答案 1 :(得分:0)
更新了Beans.Xml。我要添加索引。
<bean name = "mainAccount" class="java.util.HashSet">
<constructor-arg index="0">
<set>
<value>123</value>
<value>1234</value>
</set>
</constructor-arg>
</bean>
<bean name = "subAccount" class="java.util.HashSet" parent="mainAccount">
<constructor-arg index="0">
<set merge="true">
<value>231</value>
<value>23221</value>
</set>
</constructor-arg>
</bean>
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
<constructor-arg name="AccountIDs" ref="subAccount" />
</bean>