【发布时间】:2017-01-19 22:36:13
【问题描述】:
我的问题是关于 Spring 如何通过 @Autowired 将 java.util.Map 类型的 bean 注入到一个类中。具体来说,我看到的行为是类中自动装配 bean 的值实际上是一个包含一个键值对的 Map,其中键是 bean 的名称,值是我的映射打算注入。我预计 Spring 会直接注入地图。
这是我自动装配 bean 的类:
@Component
public class SpringMapParent {
@Autowired
@Qualifier("theMap")
private Map<String, Object> theMap;
...
}
我在我的 Spring Java 配置中定义了 theMap,如下所示:
@Configuration
@ComponentScan
public class SpringMapConfiguration {
@Bean("theMap")
public Map<String, Object> getTheMap() {
Map<String, Object> theMap = new HashMap<String, Object>();
return theMap;
}
...
}
注意地图大小为0。
我测试此注入的单元测试失败:
@ContextConfiguration(classes = {SpringMapConfiguration.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringMapIT {
@Autowired
private SpringMapParent springMapParent;
@Test
public void testSpringMapParentAutowiredCorrectly() {
Map<String, Object> theMap = springMapParent.getTheMap();
assertEquals(0, theMap.size());
}
}
theMap的大小实际上是1。一个条目是:
{theMap={}}
这是为什么?以及如何将bean中定义的映射直接注入theMap字段?
【问题讨论】:
标签: java spring dependency-injection