2017-04-26 67 views
1

我有一個@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他們像下面

@Autowired 
private Collection<Queue> queues; 

@Autowired 
private List<Queue> queues; 

我期望得到所有的(都是單獨實例化的,並且作爲 的列表)他們但我只得到那些單獨實例化。

你能提醒一下嗎?

注:

如果我使用@Qualifier我可以列表那些自動裝配,但只有這些。我正在尋找一種自動裝配它們的方法。

+0

那你想達到什麼目的?這對我來說似乎是一個壞主意。 – galovics

+0

@galovics我知道隊列apriori夫婦的名字,但我得到的名單的其餘名單。然後我想遍歷所有這些。 –

+0

你應該將它們單獨添加爲bean。您應該使用'BeanRegistryPostProcessor'或'BeanFactoryPostProcessor'來執行此操作。將它們公開爲一個列表將不會使Spring管理的bean(單獨的'隊列'在那裏)。 –

回答

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)); 
    } 
}