Весна @Autowire с наследованиемJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Весна @Autowire с наследованием

Сообщение Anonymous »

Я новичок в Spring и мне нужна ваша помощь. Я столкнулся с исключением «ожидаемый одиночный компонент совпадения, но найдено два». Я искал решение и думаю, что понял его. В большинстве решений предлагается использовать @Qualifier для разрешения этого исключения. Однако я не думаю, что это решит мою проблему. Ниже приведена моя иерархия классов:

Код: Выделить всё

abstract class A{

@Autowired
Client client;

protected void doSomething(){
/* ....some code .... */
client.someStuff();
/* ....some code .... */
}

/* ..... few abstract methods ......... */
}

class B extends A{
public void action(){ doSomething() }
}

class C extends A{
public void action(){ doSomething() }
}
Мой файл конфигурации .xml:
По сути, у меня есть абстрактный класс, у которого есть метод, общий для обоих подклассов. Этот метод использует ссылку на клиента, но во время выполнения будет использовать другой объект. doSomething() не переопределяется в подклассах.

Поэтому, когда я пытаюсь запустить этот код, он выдает мне исключение для ссылки на клиента. Я не думаю, что смогу использовать @Qualifier, потому что @Qualifier требует указать имя компонента из .xml в качестве параметра, но поскольку атрибут «клиент» является общим, я не могу использовать только одно имя компонента.

Кто-нибудь может помочь объяснить, есть ли способ обойти это место. Дублирование метода doSomething() сводит на нет всю цель наследования и приведет к дублированию кода в разных классах. Я не могу использовать атрибут client в подклассах, так как он станет неизвестен методу doSomething() во время компиляции.

Любые идеи /suggestions/solutions будут полезны.

Заранее спасибо :)

Подробнее здесь: https://stackoverflow.com/questions/241 ... nheritance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»