2017-04-26 14 views
1

私はオートワイヤリング豆

@Autowired 
private Collection<Queue> queues; 

または

@Autowired 
private List<Queue> queues; 

以下のようにそれらを@Autowireとき、私は@Configuration

@Bean 
public Queue queue1() { 
    return new Queue("queue1"); 
} 

@Bean 
public Queue queue2() { 
    return new Queue("queue2"); 
} 

@Bean 
public List<Queue> queues(List<String> names) { 
    List<Queue> ret = new LinkedList<>(); 
    for (String name : names) { 
    ret.add(new Queue(name)); 
    } 
    return ret; 
} 

に以下のようにインスタンス豆を持っています私はすべてを得ることを期待しています(両方とも個別にインスタンス化され、 のリストになります)私はそれらを個別にインスタンス化するだけです。

お願いしますか?

注:

私はリストのものがautowireだけのものに取得することができます@Qualifierを使用する場合。私はそれらをすべてautowireする方法を探しています。

+0

あなたが達成何をしたいですか?これは私にとっては悪い考えです。 – galovics

+0

@galovics私は待ち行列のカップルの名前を知っていますが、残りの名前はリストとして得られます。それから、私はすべてを繰り返していきたいと思っています。 –

+0

それぞれをBeanとして個別に追加する必要があります。これを行うには、BeanRegistryPostProcessorまたはBeanFactoryPostProcessorを使用する必要があります。リストとしてそれらを公開しても、春に管理されるbean(そこの個々の 'Queue's)は作成されません。 –

答えて

0

は最後に、私は私がPostConstructを使用して必要なものを得るために管理:

@Autowired 
private QueueNames queueNames; 

@Autowired 
private ConfigurableBeanFactory beanFactory; 

@PostConstruct 
public void queues() { 
    for (String name : queueNames.get()) { 
    beanFactory.registerSingleton(name, new Queue(name)); 
    } 
}