2017-04-26 6 views
1

Ich habe Bohnen instanziiert wie unten in einem @Configurationautowiring Bohnen instanziiert sowohl einzeln als auch als Liste

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

Als ich sie @Autowire wie unten

@Autowired 
private Collection<Queue> queues; 

oder

@Autowired 
private List<Queue> queues; 

Ich würde erwarten, alle zu bekommen (sowohl die einzeln instanziiert als auch als eine Liste) von ihnen, aber ich bekomme nur die einzeln instanziiert.

Können Sie bitte beraten?

Hinweis:

Wenn ich @Qualifier verwende ich kann die Liste diejenigen bekommen autowire sondern nur diejenigen. Ich suche nach einer Möglichkeit, sie alle zu autowire.

+0

Was wollen Sie erreichen? Dies scheint eine schlechte Idee für mich zu sein. – galovics

+0

@galovics Ich kenne den Namen von einigen der Warteschlangen apriori, aber den Rest der Namen bekomme ich als Liste. Dann möchte ich alle durchlaufen. –

+0

Sie sollten sie einzeln als Bohnen hinzufügen. Sie sollten dazu einen 'BeanRegistryPostProcessor' oder' BeanFactoryPostProcessor' verwenden. Wenn man sie als Liste ausstellt, werden keine Spring-Beans (die einzelnen 'Queue's drin) gemacht. –

Antwort

0

Am Ende schaffte ich zu bekommen, was ich PostConstruct mit benötigt:

@Autowired 
private QueueNames queueNames; 

@Autowired 
private ConfigurableBeanFactory beanFactory; 

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