Spring自动连接多个Interface实现

pan*_*nnu 4 java spring annotations

interface A{
 void some();
}

@Component
class B implements A{
 @override
 some(){
 }
}

@Component
class C implements A{
@override
 some(){
 }
}

Class D {
@Autowired
List<A> somes;//will it have the instances of both
}
Run Code Online (Sandbox Code Playgroud)

我正在开发一个项目,我们有多个类实现相同的接口.如何让D类中的列表包含B类和C类的bean?

Mou*_*kir 7

实际上你会得到一个解决bean冲突异常,

有各种解决方案:

  1. 使用@Primary注释使其中一个bean可选.
@Component
@Primary
class B implements A{

    @override
    some(){
    }

}

@Component
class C implements A{

    @override
    some(){
    }

}

Class D {

    @Autowired
    List<A> somes;//B will be injected because it primary

}
Run Code Online (Sandbox Code Playgroud)
  1. 或者使用@Qualifier@Resource注释.场景.
@Component("beanB")
class B implements A{

    @override
    some(){
    }

}

@Component("beanC")
class C implements A{

    @override
    some(){
    }

}

Class D {

    @Autowired
    @Qualifier("beanB")
    List<A> somes;//B will be injected because of @Qualifier

}
Run Code Online (Sandbox Code Playgroud)