Проблема Java / Spring с аннотациями @Service и @Autowired - PullRequest
5 голосов
/ 11 февраля 2011

[весна 3.0.5] [jboss 5.1]

У меня есть несколько классов, помеченных как @Service, что реализует тот же интерфейс.

Например,

@Service(value="test1") 
public TestImpl1 implements Test {} 
@Service(value="test2") 
public TestImpl2 implements Test {} 

Далее у меня следующая структура

public SomeClass { 
@Autowired 
@Qualifier("test1") 
Test test1; 
@Autowired 
@Qualifier("test2") 
Test test2; 

Я получаю исключение (при развертывании)

10:36:58,277 ERROR [[/test-web]] Servlet /test-web threw load() 
exception 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
unique bean of type [pl.tests] is defined: expected single matching 
bean but found 2: [test1, test2] 
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.doReso lveDependency(DefaultListableBeanFactory.java: 
796) 
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolv eDependency(DefaultListableBeanFactory.java: 
703) 
        at 
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostPro cessor 
$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java: 
474) 

Кто-нибудь знает, как решить эту проблему?

Т.

1 Ответ

4 голосов
/ 11 февраля 2011

Несколько вариантов:

  • Используйте @Resource(name="test1") в точке впрыска
  • может использовать механизм javax.inject.Qualifer. Вкратце - вы определяете аннотацию (@Test) и аннотируете аннотацию с помощью @Qualifier Затем используйте @Autowired @Test в точке впрыска.
  • явно устанавливает квалификаторы для целевого компонента. Документы говорят, что показывают только версию XML <qualifier />, но попробуйте добавить @Qualifier("test1") в определение службы

Вот документация об этом

...