属性注入失败问题记录

1.前因:
需要在一个类中注入一个mapper类操作数据库,选择用@Autowired注解注入。

public class XXXClass {
    private int size = 10000;
    @Autowired
    private XxxMapper xxxMapper;
    public XXXClass (int size) {
        this.size = size;
    }
}

2.问题:
后发现此类未加spring框架中@Service,@Repository,@Component,@Controller其中任何一个注解,因此注入失败,mapper为null。
后又在此类上加了@Component注解,启动报错,信息如下:

Description:
Parameter 0 of constructor in com.xxx.service.impl.xxx required a bean of type ‘java.lang.int’ that could not be found.

3.原因:
此类手动定义了有参构造,则默认的无参构造方法失效。所以只能调这个类的有参构造来创建此对象,而@Component注解注入时调用的是无参构造,未传参数调有参构造,因此报以上错误。

4.最终解决方案:
通过有参构造注入需要的mapper类,不通过@Autowired注解注入。

public XXXClass (int size, XxxMapper xxxMapper) {
        this.size = size;
        this.xxxMapper= xxxMapper;
}

5.遗留问题未解
如是因缺失无参构造方法,而调用了有参构造初始化对象,最终因缺失参数而报错。那么给该对象手动加一个无参构造应该也可以解决,但试验发现mapper注入还是为null,未找到原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值