2015-03-30 3 views
1

Я имею следующую структуру класса:Spring @Qualifier не работает при наследовании интерфейса

class A{ 
... 
} 

class B{ 
... 
} 

interface I<T>{ 
... 
} 

@Component("childA") 
class ChildA implements I<A>{ 
. .. 
} 

@Component("childB") 
class ChildB implements I<B>{ 
... 
} 


class Test { 
@Autowired 
@Qualifier("childA") 
public I<A> childOfA; 
} 

я получаю исключение не уникальный компонент типа I для свойства childOfA даже после того, как я использую классификатор.

Я пробовал использовать default-autowire = no - он перепутался с другими частями кода.

ответ

0

Согласно Component docs, это значение является «предлагаемым именем», а не конкретным классификатором. Если вы еще этого не сделали, попробуйте изменить его, чтобы явно указать Qualifier, например:

@Component 
@Qualifier("childA") 
class ChildA implements I<A>{ ... } 

@Component 
@Qualifier("childB") 
class ChildB implements I<B>{ ... } 
+0

Пробовал. По-прежнему получена такая же ошибка. –

+0

Даже попытался объявить bean-элементы childA и childB с помощью xml, но все равно столкнулся с той же проблемой. –

+0

Я видел в прошлом, когда Spring имеет некоторые проблемы с выяснением типов шаблонов из-за типа Erasure. Я попытаюсь вспомнить, как я это решал в прошлом, и оставляю еще один комментарий. В конце концов, я просто полностью избавился от интерфейсов, потому что они были расточительными во всех наших случаях использования. – xathien