Сливане на колекция в Java Spring с помощта на beans

Аз съм нов в 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: Грешка при създаване на bean с име „subAccount“, дефинирано в ресурса на пътя на класа [Beans.xml]: Неудовлетворена зависимост, изразена чрез аргумент на конструктора с индекс 0 от тип [int]: Не може да се преобразува стойност на аргумента на конструктора от тип [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 към subAccount. Опитах всички възможни начини, но не може да реши това. Някои насоки биха били полезни.


person rohan    schedule 05.07.2015    source източник


Отговори (2)


Проблемът тук, който виждам, е начинът, по който се опитвате да обедините колекцията. Вие създавате екземпляр на колекция и се надявате, че сливането ще се случи по време на изграждането на набора.

Как работи пролетното сливане, ще трябва да дефинирате свой собствен bean (Родител) със свойство на колекция, да речем Set с име на свойство, да речем mySet, и след това можете да дефинирате дъщерния bean със същото име на свойство и да декларирате атрибута за сливане на набора към вярно. Тогава пролетта ще разбере коя колекция с какво да комбинира.

Можете да следвате URL адреса по-долу, за да видите как се прави

Обединяване на колекция

person Johnson Abraham    schedule 05.07.2015

Актуализиран 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>
person rohan    schedule 05.07.2015