2016-08-12 16 views
0

同じ名前のBeanグループに名前を付ける方法はありますか?たとえば、Bean A、B、C、D、EIはBean A、B、Cを読み込むことができます。名前group1、名前bean2のBean D、Eをロードします。同じ名前のBeanの名前付けグループ

+0

多分あなたは他のbeanを注入してロードするbean group1を作成できますか?オブジェクトは何ですか? – DamienB

+0

オブジェクトとは何ですか? – pppavan

+0

なぜあなたはそれをしたいですか?理由はありますか?それとも、単一のエントリで多くのbeanを呼び出すだけですか? – DamienB

答えて

0

@Autowireフィールドに@Qualifier("mySpecialImplementation")を追加することで、読み込まれるインターフェイスの実装を指定できます。そのため、実装には@Component("mySpecialImplementation")とマークする必要があります。

基本的には、具体的な実装に一意の(String)識別子を割り当てています。特別な実装をロードするには、QualifierアノテーションでIDを指定します。

本当に "グループ"のBeanをロードする必要がある場合:このグループ内にロードするすべてのBeanの自動配線フィールドを含む新しい "グループ - Bean"を作成してください。新しい "group-bean"を注入すると、そのグループ内の他のすべてのbeanもロードされます。

例:基本的にはそう

@Autowire 
ApplicationContext context; 

List<Object> loadBeanGroup(List<String> beanNames){ 
    List<Object> result = new LinkedList<>(); 
    for(String name: beanNames){ 
     result.add(context.getBean(name)); 
    } 
    return result; 
} 

あなたは:

@Autowired 
Group1 group1; 
あなたが本当にリストをロードする必要がある場合

はなく、事前に定義されたグループのいくつかの種類によって

@Service 
class Group1 { 
    @Autowired 
    private A a; 
    @Autowired 
    private B b; 
    @Autowired 
    private C c; 
    ... 
} 

@Service 
class Group2 { 
    @Autowired 
    private D d; 
    @Autowired 
    private E e; 
    ... 
} 

読み込み、それをBean名(あなたのグループ)を持つ文字列のリストを定義することができます。リスト内のすべてのBeanをロードします。

+0

iistのようにロードする複数のBeanが必要です – pppavan

+0

これは私が上で説明したものです。コード例で解決策を明らかにする。私は自分の投稿を編集します。 – gorootde

+0

ここでは動的ではありません。私の場合、よりダイナミックでなければなりません。マップをオートワイヤリングするように。 – pppavan

関連する問題