我在春天定义了一张地图:
<util:map id="AdditionalParams" scope="prototype" map-class="java.util.HashMap" 
          key-type="java.lang.String" value-type="java.lang.String">
    <entry key="Start" value="12345" />
    <entry key="Finish" value="12365" />
</util:map>
然后我将这个bean自动装配到一个定义为:
private @Autowired @Qualifier(value = "AdditionalParams") Map<String, String> additionalParams;
执行此操作时,会抛出一个异常,说:
引起:org.springframework.beans.factory.BeanCreationException:创建名为'DutyCreator'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private java.util.Map DutyCreator.additionalParams; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:[java.lang.String中]找到的依赖性[地图值java.lang.String类型]无类型的匹配豆:预期至少1豆,其有资格作为候选自动装配对于这种依赖.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = AdditionalParams)}
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[java.lang.String]的匹配bean为依赖[map with value type java.lang.String]:期望至少有一个bean有资格作为autowire候选者对于这种依赖.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = AdditionalParams)}
有任何想法吗?
干杯.
gar*_*rst 117
从Spring 4.3开始,@Autowired 可以注入列表和映射,问题中的给定代码可以工作:
也就是说,从4.3开始,
@Autowired只要元素类型信息保留在@Bean返回类型签名或集合继承层次结构中,集合/映射和数组类型也可以通过Spring的类型匹配算法进行匹配.
但是使用较低的Spring版本,您无法自动装配这样的集合.但是,您可以执行以下操作:
@Resource(name="AdditionalParams")
private Map<String, String> additionalParams;
甚至:
@Value("#{AdditionalParams}")
private Map<String, String> additionalParams;
查看spring文档,提示部分:
自身定义为集合或地图类型的bean无法通过@Autowired注入,因为类型匹配不适用于它们.对这样的bean使用@Resource
| 归档时间: | 
 | 
| 查看次数: | 44089 次 | 
| 最近记录: |