SpringBoot 参数无法自动注入Map、Collection、数组问题
问题描述:
@Bean
@ConditionalOnMissingBean(CpfDataSourceLookup.class)
public CpfDataSourceLookup cpfDataSourceLookup(@Qualifier("backupDataSources") Map<String,Datasource> backupDataSources){
return new CpfDataSourceLookup(backupDataSources);
}
<util:map id="backupDataSources">
</util:map>
这里我希望匹配一个Map类型的参数,并且我指定了Qualifier的名称,所以按道理来说是应该要自动注入的,但实际发现在注入时报找不到该类型。
springboot版本是1.5.17,同时我有个springboot2.3.1的工程,跑了一下发现是可以的。
这时候就来看下spring代码实现,代码位于DefaultListableBeanFactory.findAutowireCandidates方法
String[] candidateNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
this, requiredType, true, descriptor.isEager());//取出容器中所需类型所有bean名称(这里是Map类型所有bean)
Map<String, Object> result = new LinkedHashMap<String, Object>(candidateNames.length);
for (Class<?> autowiringType : this.resolvableDependencies.keySet()) {
if (autowiringType.isAssignableFrom(requiredType)) {
Object autowiringValue = this.resolvableDependencies.get(autowiringType);
autowiringValue = AutowireUtils.resolveAutowiringValue(autowiringValue, requiredType);
if (requiredType.isInstance(autowiringValue)) {
result.put(ObjectUtils.identityToString(autowiringValue), autowiringValue);
break;
}
}
}
//逐一匹