标签:
注入map,平常一般不会这么做,今天在写一个demo时,有如下一段注入代码:
map bean 的创建
@Bean(name="userMap") public Map<Long, User> userMap() { return new ConcurrentHashMap<Long, User>(); }
// 注入 @Autowired @Qualifier("userMap") private Map<Long, User> userMap;
怕出错,我还特意加了Qualifier限定符,但是spring 容器就起不来了,异常如下,大概意思就是map的key要是String类型才行:
Caused by: org.springframework.beans.FatalBeanException: Key type [class java.lang.Long] of map [java.util.Map] must be assignable to [java.lang.String]
原因如下:org.springframework.beans.factory.support.DefaultListableBeanFactory中的一段代码
Class<?> keyType = descriptor.getMapKeyType(); if (keyType == null || !String.class.isAssignableFrom(keyType)) { if (descriptor.isRequired()) { throw new FatalBeanException("Key type [" + keyType + "] of map [" + type.getName() + "] must be assignable to [java.lang.String]"); } return null; }
用set 方法也不行。但是使用如下方法却奏效了:
@Resource(name = "userMap") private Map<Long, User> userMap;
标签:
原文地址:http://my.oschina.net/u/2007041/blog/395352