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) { //.. }