Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Spring创建HashMap,但可以';不要创建地图_Spring - Fatal编程技术网

可以使用Spring创建HashMap,但可以';不要创建地图

可以使用Spring创建HashMap,但可以';不要创建地图,spring,Spring,我可以在使用Spring的applicationContext(3.0.5)中执行此操作: 在我的控制器中,我可以像这样自动连接地图: @Autowired @Qualifier("map") private HashMap<String, String> map; @Autowired @限定符(“映射”) 私有哈希映射; 它工作正常,但如果我这样做: @Autowired @Qualifier("map") private Map<String, String>

我可以在使用Spring的applicationContext(3.0.5)中执行此操作:


在我的控制器中,我可以像这样自动连接地图:

@Autowired
@Qualifier("map")
private HashMap<String, String> map;
@Autowired
@限定符(“映射”)
私有哈希映射;
它工作正常,但如果我这样做:

@Autowired
@Qualifier("map")
private Map<String, String> map;
@Autowired
@限定符(“映射”)
私人地图;
我明白了:

原因: org.springframework.beans.factory.noSuchBean定义异常:否 为依赖项[map]找到了类型为[java.lang.String]的匹配bean 值类型为java.lang.String]:应至少有1个bean 符合此依赖项的autowire候选条件。附属国 注释: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=map)}

我的问题是:为什么我不能用接口自动连接地图,而我可以用实现自动连接地图


谢谢。

尝试使用
@Resource
而不是
@Autowired

@Resource(name="map") 
private HashMap<String, String> map;
@Resource(name=“map”)
私有哈希映射;

查看Spring文档中的提示

在声明collection类型的bean时,不能通过@Autowired注入它。请参阅Spring的以下文档:

这种语义差异的一个具体结果是 定义为集合或映射类型的自身不能通过 @自动连线,因为类型匹配不适用于它们。使用 @资源,引用特定的集合/映射 使用唯一的名称创建bean

因此,使用
@Resource
,而不是
@Autowired

@Resource
@Qualifier("map")
private Map<String, String> map;
@Resource
@限定符(“映射”)
私人地图;

没有map的bean id,这让人困惑真正的问题是:map根本不应该是SpringBean。服务应该是bean,数据不应该是。如果你真的想要一个映射bean,那么创建一个包含映射的bean并注入它。@SeanPatrickFloyd为什么不呢?你可以注入任何东西并获得好处。没有负面影响吧?(假设您给它一个描述性的名称)但我不能在构造函数参数上使用@Resource。我需要这是通过构造函数
@Resource
@Qualifier("map")
private Map<String, String> map;