是否可以使用Spring Bean实现2个接口,并且能够使用任一接口自动装配该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]类型的限定bean:期望至少有1个bean符合此依赖关系的autowire候选者。依赖注释:{}
我使用的是Spring Boot 1.4.0版本
答案 0 :(得分:0)
是的,这是可能的,但是 重要的是,创建ServiceImpl类型的服务bean而不是服务接口之一:
@Bean
ServiceImpl service(){
return new Serviceimpl();
}
Spring在声明的 bean类型上使用反射来找出它实现的接口而不是bean.getClass()。
希望有所帮助
答案 1 :(得分:0)
您可以使用@Qualifier注释。它可以在注射点与@Autowired或@Inject一起应用,以指定您想要注入的bean。
@Autowired
@Qualifier("iceCream")
public void setDessert(Dessert dessert) {
this.dessert = dessert;
}
资料来源:Spring in Action第4版,
答案 2 :(得分:0)
让我一个接一个地回答您的问题:
您的共享代码运行正常,只需检查您的SpringBootConfiguration类,我认为您不是在扫描服务包,或者您的服务类不在SpringBootConfiguration类的子包中。
这就是您要面对的原因:
NoSuchBeanDefinitionException