使用bean在Java Spring中收集合并

时间:2015-07-05 06:43:28

标签: java xml spring spring-mvc javabeans

我是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尝试了所有可能的方法,但无法解决这个问题。一些指导会有所帮助。

2 个答案:

答案 0 :(得分:1)

我看到的问题是,您尝试合并集合的方式。您正在创建集合的实例,并希望在构造集合期间进行合并。

Spring合并的工作原理是,你必须定义你自己的bean(Parent),其属性为collection,设置属性名称为mySet,然后你可以用相同的属性名定义你的子bean并声明set& #39; s merge属性为true。那是春天会明白哪个集合与什么合并。

您可以按照以下网址查看其完成情况

Collection Merging

答案 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>