[英]Spring autowired collection of qualified beans
我有一些帶有@Qualifier批注的Spring @Components,例如在示例“ A”和“ B”中。 我想將它們(僅使用注釋)注入到List中。 我怎樣才能做到這一點 ?
@Component
public class WhatIHave {
@Autowired
@Qualifier("A")
private MyType firstBean;
@Autowired
@Qualifier("B")
private MyType secondBean;
....
}
@Component
public class WhatIWantToHave {
@Autowired
@Qualifier("A", "B") //something like that
private List<MyType> beans;
...
}
我需要在@Configuration類中創建它嗎?
@Configuration
public class MyConfiguration {
@Autowired
@Qualifier("A")
private MyType firstBean;
@Autowired
@Qualifier("B")
private MyType secondBean;
@Bean
public List<MyType> beans() {
return Lists.newArrayList(firstBean, secondBean);
}
}
還是有另一種方法可以做到這一點?
@Qualifier
知道在相同類型的bean情況下哪個bean可以在字段上自動裝配,所以為什么不這樣做:
@Autowired
@Qualifier("A")
private MyType firstBean;
@Autowired
@Qualifier("B")
private MyType secondBean;
然后:
List<MyType> list = new ArrayList<>();
list.add(firstBean);
list.add(secondBean);
這個解決方法如何
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class TypeCollector implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public <T> List<T> getBeans(Class<T> clazz, String... names) {
List<T> list = new ArrayList<>();
for (String name : names) {
list.add(applicationContext.getBean(name, clazz));
}
return list;
}
}
您可以自動連接TypeCollector並要求bean運行時。 缺點是您將在運行時獲取NoSuchBeanDefinitionException,並且必須使用Bean名稱而不是限定符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.