解决:Parameter 0 of constructor in com.mise.smart.entity.HrmNoticeEntity required a bean of type 'java.lang.Integer' that could not be found.
- 一·问题描述:
- 二·问题原因:
- 1.原因产生背景:
- (1)实体类利用spring注解注入bean时,在springboot项目启动期间,spring会自动调用该类的构造方法进行创建对象,然后将其注入IOC容器
- (2)如果没有对类进行特殊配置,Spring默认调用无参构造方法,创建对象注入容器。
- (3)若实体类没有无参构造方法,且存在多个有参构造方法,且没有使用@Autowired注解指明使用哪个构造方法创建Bean对象,则Spring项目启动就会直接报错
- (4)若实体类没有无参构造方法,spring就会去调用实体类唯一的有参构造方法创建bean对象,且会根据有参构造函数,自动从IOC里面获取相应对象实例;若IOC中没有实例,则会尝试创建该参数类的bean对象且自动注入IOC里面;若该参数实体类没有交给spring管理bean(即:不能注入IOC),那么就会报错,提示没有提供必要的构造参数。
- 2.根本原因:实体类缺少无参构造方法,或者有参构造方法的参数实体类没有注入IOC容器
- 3.直接原因:
- 三·解决办法:
- 四·测试结果:启动成功!
一·问题描述:
1.做excel导出功能时,启动springboot项目失败,报错如下所示。
二·问题原因:
1.原因产生背景:
(1)实体类利用spring注解注入bean时,在springboot项目启动期间,spring会自动调用该类的构造方法进行创建对象,然后将其注入IOC容器
(2)如果没有对类进行特殊配置,Spring默认调用无参构造方法,创建对象注入容器。
(3)若实体类没有无参构造方法,且存在多个有参构造方法,且没有使用@Autowired注解指明使用哪个构造方法创建Bean对象,则Spring项目启动就会直接报错
(4)若实体类没有无参构造方法,spring就会去调用实体类唯一的有参构造方法创建bean对象,且会根据有参构造函数,自动从IOC里面获取相应对象实例;若IOC中没有实例,则会尝试创建该参数类的bean对象且自动注入IOC里面;若该参数实体类没有交给spring管理bean(即:不能注入IOC),那么就会报错,提示没有提供必要的构造参数。
2.根本原因:实体类缺少无参构造方法,或者有参构造方法的参数实体类没有注入IOC容器
3.直接原因:
(1)lombok插件的@Data注解,理解有偏差,实体类上面已经加了全参构造注解。
lombok插件的@Data注解作用:
(1)在你没有显示声明有参构造方法的时候,它会自动给类加上必要的无参构造函数;
(2)如果你主动加上了有参构造方法,包括利用lombok插件的全参构造注解生成有参构造方法,@Data注解就不会再自动生成无参构造方法。
(3)其他作用如下图所示。