Java 映射行为的Spring自动关联
我的问题是关于Spring如何通过Java 映射行为的Spring自动关联,java,spring,dependency-injection,Java,Spring,Dependency Injection,我的问题是关于Spring如何通过@Autowired将java.util.Map类型的bean注入类中。具体来说,我看到的行为是,类中自动连线bean的值实际上是一个包含一个键值对的映射,其中键是bean的名称,值是我打算注入的映射。我原以为春天会直接注入地图 下面是我自动连接bean的类: @Component public class SpringMapParent { @Autowired @Qualifier("theMap") private Map<S
@Autowired
将java.util.Map
类型的bean注入类中。具体来说,我看到的行为是,类中自动连线bean的值实际上是一个包含一个键值对的映射,其中键是bean的名称,值是我打算注入的映射。我原以为春天会直接注入地图
下面是我自动连接bean的类:
@Component
public class SpringMapParent {
@Autowired
@Qualifier("theMap")
private Map<String, Object> 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());
}
}
为什么会这样?如何将bean中定义的映射直接注入
theMap
字段?@Autowired
上的map
正在以特定的方式处理。说:
即使键入的映射也可以自动连接,只要所需的键类型是字符串。映射值将包含预期类型的所有bean,键将包含相应的bean名称
另一份文件说:
对于本身定义为集合/映射或数组类型的bean,@Resource
是一个很好的解决方案,通过唯一的名称引用特定的集合或数组bean。也就是说,从4.3开始,集合/映射和数组类型也可以通过Spring的@Autowired
类型匹配算法进行匹配,只要元素类型信息保留在@Bean
返回类型签名或集合继承层次结构中。在这种情况下,可以使用限定符值在相同类型的集合中进行选择,如前一段所述
因此,下一步可以注入Map
bean:
@Component
public class SpringMapParent {
@Resource
@Qualifier("theMap")
private Map<String, Object> theMap;
...
}
@组件
公共类SpringMapParent{
@资源
@限定词(“主题图”)
私人地图专题地图;
...
}
{theMap={}}
@Component
public class SpringMapParent {
@Resource
@Qualifier("theMap")
private Map<String, Object> theMap;
...
}