2016-10-07 7 views
3

Возможно ли иметь 2-битный интерфейс Spring Bean и иметь возможность автоподъединять этот компонент с помощью интерфейса?Autowire Spring bean, реализующий два интерфейса

У меня есть следующие:

Два интерфейса

public interface ServiceA {} 

public interface ServiceB {} 

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

@RestController 
public class ControllerA { 

    public ControllerA(ServiceA service) {} 

} 

@RestController 
public class ControllerB { 

    public ControllerB(ServiceB service) {} 

} 

один класс, который реализует как услуги

@Service 
public class ServiceImpl implements ServiceA, ServiceB { } 

Я получаю NoSuchBeanDefinitionException

вызвано следующими причинами: org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет квалификационную боб типа [ServiceB] найдено для зависимостей [ServiceB]: ожидается, по крайней мере, 1 боб, который квалифицируется как autowire кандидата на эта зависимость. Зависимость от аннотаций: {}

Я использую Spring загрузочную версию 1.4.0

+0

Я не могу видеть @Service или подобное в этих интерфейсов –

ответ

1

Да, это возможно, но важно, чтобы создать сервисный компонент типа ServiceImpl, а не в качестве одного из интерфейсов служб :

@Bean 
ServiceImpl service(){ 
return new Serviceimpl(); 
} 

Spring использует отражение на объявленного типа боба, чтобы выяснить, какие интерфейсы он реализует, а не на bean.getClass().

Надежда, что помогает

+0

я попробовал это. Это не сработало – scarba05

0

Вы можете использовать аннотацию @Qualifier. Он может применяться наряду с @Autowired или @Inject в точке инъекции, чтобы указать, какой компонент вы хотите ввести.

@Autowired 
@Qualifier("iceCream") 
public void setDessert(Dessert dessert) { 
    this.dessert = dessert; 
} 

Источник: Spring в действии 4-е издание,

 Смежные вопросы

  • Нет связанных вопросов^_^