解决:Parameter 0 of constructor in XXX required a bean of type ‘XXX‘ that could not be found

解决:Parameter 0 of constructor in com.mise.smart.entity.HrmNoticeEntity required a bean of type 'java.lang.Integer' that could not be found.

一·问题描述:

1.做excel导出功能时,启动springboot项目失败,报错如下所示。

在这里插入图片描述
在这里插入图片描述

二·问题原因:

1.原因产生背景:

(1)实体类利用spring注解注入bean时,在springboot项目启动期间,spring会自动调用该类的构造方法进行注入IOC容器

(2)如果没有进行特殊配置,就会默认调用无参构造方法进行注入容器。

(3)若存在多个有参构造方法,且没有无参构造方法,且没有使用@Autowired注解指明使用哪个构造方法创建Bean,则Spring项目启动就会直接报错

(4)如果实体类没有无参构造方法,spring就会去调用实体类唯一的有参构造方法,且会自动去加载构造函数所需要的参数实例到IOC里面。如果该参数实体类没有交给spring管理bean(即:没有注入IOC),那么就会报错,提示没有提供必要的构造参数。

2.根本原因:实体类缺少无参构造方法,或者有参构造方法的参数实体类没有注入IOC容器

3.直接原因:

(1)lombok插件的@Data注解,理解有偏差,实体类上面已经加了全参构造注解。

lombok插件的@Data注解作用:
(1)在你没有显示声明有参构造方法的时候,它会自动给类加上必要的无参构造函数;
(2)如果你主动加上了有参构造方法,包括利用lombok插件的全参构造注解生成有参构造方法,@Data注解就不会再自动生成无参构造方法。
(3)其他作用如下图所示。

在这里插入图片描述

(2)Integer类型是JDK包原生类,没有自动注入IOC容器里面,且也不建议注入IOC容器里面(虽然也有办法将Integer自动注入IOC容器,但是经常实例化对象的类,没必要new一个对象注入IOC容器,一般只有全局都使用唯一一个对象时,才建议将其注入IOC容器里面管理,因此一般实体bean也不建议注入IOC里面)

三·解决办法:

方式一:在实体类上面再加上lombok插件的无参构造注解

在这里插入图片描述

方式二:将没有注入IOC容器的参数bean,注入进去就行。即在实体类上面加@Component注解,在属性Integer类型上使用@Value注解直接赋默认值

四·测试结果:启动成功!

在这里插入图片描述

  • 46
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ideal-cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值