spring @Autowired map

 注入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;



转载于:https://my.oschina.net/u/2007041/blog/395352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值