首页 文章

Autowire Spring bean实现两个接口

提问于
浏览
3

是否有可能有一个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版

2 回答

  • 0

    是的,但是重要的是,创建ServiceImpl类型的服务bean而不是作为服务接口之一:

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

    Spring在 declared bean类型上使用反射来找出它实现的接口,而不是bean.getClass() .

    希望有所帮助

  • 1

    您可以使用@Qualifier注释 . 它可以在注入点与@Autowired或@Inject一起应用,以指定要注入的bean .

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

    资料来源:Spring in Action第4版,

相关问题