2017-10-04 58 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 
    
    }