Spring Java config包装注入的地图

我最近从使用Spring的XML配置切换到Java配置,并遇到了一个奇怪的问题。

XML配置是:

        

Java配置是:

 @Bean public Map myMap() { Map myMap = new HashMap(); myMap.put("a", "aValue"); myMap.put("b", "bValue"); myMap.put("c", "cValue"); return myMap; } @Bean public MyClass myBean(@Qualifier("myMap") final Map myMap) { MyClass myBean = new MyClass(); myBean.setMyMap(myMap); return myBean; } 

这两个bean都在不同的文件中声明,我将它们分组在这里以便于阅读。 地图也包含引用,而不仅仅是字符串。

我希望能够在第二个bean中使用myMap ,而不是Spring注入以下映射:

 { myMap = { a=aValue, b=bValue, c=cValue } } 

我不明白为什么Spring将地图包装到另一个地图中,以及为什么它与XML配置的行为方式不同。

有任何想法吗?

有一个问题@Autowired -ing Map甚至定义了bean名称,因为根据注释你不能使用建议的@Resource注释,有一个替代方法是使用定义bean名称的@Value注释:

 @Bean public MyClass myBean(@Value("#{myMap}") final Map myMap) { //.. }