(已解决)Parameter x of constructor in xxxxxrequired a bean of type

一、问题

控制台报错

“Parameter 7 of constructor in xxxxxxx required a bean of type 'java.lang.Integer' that could not be found.

Action:

Consider defining a bean of type 'java.lang.Integer' in your configuration.”

二、错误定位

@AllArgsConstructor
public class demo {
    private IxService xService;
    private IxDao xDao;
    private IxxService xxService;
    
    @Value("${x.xx}")
    private Integer xx;
    @Value("${x.xxx}")
    private Integer xxx;
}

三、解决方式

去掉@AllArgsConstructor注释,代码如下:

public class demo {
    @Autowired
    private IxService xService;
    @Autowired
    private IxDao xDao;
    @Autowired
    private IxxService xxService;
    
    @Value("${x.xx}")
    private Integer xx;
    @Value("${x.xxx}")
    private Integer xxx;
 }

四、错误原因

在类上加了@AllArgsConstructor注释的同时又引入了yml文件里配置的属性,该属性是有@Value的属性,两相冲突导致。

加@AllArgsConstructor的目的主要是为了多个属性可以自动构造函数注入,不用加很多@Autowired ,从而精简代码。

详解

@AllArgsConstructor 和 @Value 同时存在可能引发问题的原因是它们的执行顺序。这两个注解在Spring框架中会有不同的初始化时机。

  • @AllArgsConstructor

这是Lombok库的一部分,它会在编译时生成一个构造函数,该构造函数包含所有类字段作为参数。这意味着@AllArgsConstructor 会在编译时生成构造函数,而不需要Spring的容器初始化。这个构造函数通常是在类加载时生成的。

  • @Value

 这是Spring框架的一个注解,用于从配置文件中读取属性值。它依赖于Spring的容器和生命周期,因此属性值需要在Spring容器初始化之后才能被注入。@Value 可以用来注入属性值,包括基本数据类型如 int 或 String,以及自定义的bean。

当这两个注解同时存在时,可能会出现问题,因为@AllArgsConstructor 生成的构造函数在类加载时可用,但Spring容器初始化的时机通常晚于类加载。这意味着在生成构造函数时,Spring容器可能还没有准备好,所以 @Value 无法正常工作。

五、其他

@NoArgsConstructor:生成无参的构造方法。

@AllArgsConstructor:生成该类下全部属性的构造方法。

@RequiredArgsConstructor:生成该类下被final修饰或者non-null字段生成一个构造方法。

场景

在springboot中,对于一个bean类,注入其他bean的时候,常见的是使用@Autowired,实际上也可以使用构造函数注入,这个时候就可以使用@AllArgsConstructor或者@RequiredArgsConstructor来代替。


✊码字不易,重新开始记录小bug,望大家多多支持,共勉!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值