Spring - аргумент инициализации bean-компонента - UnsatisfiedDependencyException - Не удается преобразовать DataBean в вектор? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть два списка (тип vector), и я хочу выбрать один из них в качестве аргумента для инициализации bean-компонента. Однако, хотя напрямую передается вектор классу «Helper», работает конструктор («helper1» в примере ниже), передача hnc: данных, сгенерированных из метода, будет рассматриваться как Bean вместо Vector («helper2» ниже). Подробности ниже. Есть ли простой способ устранить эту ошибку? А.К.А. заставить helper2 работать? Спасибо,

  • Настройка:

- Java:

public class VectorPicker {
    @Produces
    public Vector chooseAVector(@("v1") v1, @("v2") v2) {
        return v1;
    }
}

- xml:

<util:list id="vector1" list-class="java.util.Vector">
    <value>value1</value>
</util:list>
<util:list id="vector2" list-class="java.util.Vector">
    <value>value2</value>
</util:list>
<bean name="vectorPicker" class="com.amazon.class.path.VectorPicker" />
<hnc:data name="chosenVector" ref="vectorPicker" method="chooseAVector" >
    <property name="v1" ref="vector1" />
    <property name="v2" ref="vector2" />
</hnc:data>
  • Применение

- Java:

public class Helper {
    public Helper(Vector v) {...}
}

- xml:

<bean id="helper1" class="com.amazon.class.path.Helper">
    <constructor-arg index="0" ref="vector1" />
</bean> # this is working fine

<bean id="helper2" class="com.amazon.class.path.Helper">
    <constructor-arg index="0" ref="chosenVector" />
</bean> # this is throwing error

- Сообщение об ошибке:

rg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'helper2' defined in class path resource [assembly/data/data.xml]: Unsatisfied dependency expressed through constructor parameter 1: Could not convert argument value of type [com.amazon.matrix.nestedcomponents.spi.bean.DataBean] to required type [java.util.Vector]: no matching editors or conversion strategy found

1 Ответ

0 голосов
/ 07 сентября 2018

Это выглядит действительно странно. Единственный конструктор Helper получает экземпляр Vector в качестве параметра. Так почему вы ожидаете, что это сработает? Проблема в том, что вы пытаетесь передать бин класса VectorPicker или его метод chooseAVector (извините, я не так близко знаком с объявлениями в стиле XML). Первое, что приходит мне в голову, это объявить еще один конструктор класса Helper с обязательным параметром. Как то так:

public class Helper {

    @Autowired
    public Helper(VectorPicker  picker) {...}
}

или это

public class Helper {

    public Helper(BiFunction<Vector, Vector, Vector>  supplier) {...}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...