【问题标题】:Collection Merge in Java Spring using beansJava Spring中的集合合并使用bean
【发布时间】:2015-09-22 12:51:04
【问题描述】:

我是 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>

我无法将集合合并到子帐户集合中。 我得到了例外:-

相关原因: 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。我尝试了所有可能的方法方法但无法解决此问题。一些指导会有所帮助。

【问题讨论】:

    标签: java xml spring spring-mvc javabeans


    【解决方案1】:

    我看到的问题是,您尝试合并集合的方式。您正在创建一个集合的实例,并希望在 Set 的构造过程中发生合并。

    spring merging 的工作原理是,你必须定义你自己的 bean (Parent) 和一个 collection 的属性 say Set 和属性名称 say mySet,然后你可以定义你的子 bean 具有相同的属性名称并声明集合的合并属性为真。到时候 spring 就会明白哪个集合要与什么合并。

    您可以按照下面的网址查看它是如何完成的

    Collection Merging

    【讨论】:

      【解决方案2】:

      更新了 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>
      

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        相关资源
        最近更新 更多