2017-10-04 72 views
2
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 
} 

我正在一个项目,我们有多个类实现相同的接口。 如何获得类D中的列表以包含B类和C类的bean?春天autowire接口的多个实现

回答

3

其实你会得到一个解决冲突豆例外

有应该是一个各种解决方案:

  1. 使豆通过@Primary注释可选之一。
@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 

} 
  • 或使用@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 
    
    }