Lombok的@AllArgsConstructor是否存在Bug?Spring Boot启动报错咨询
Spring Boot启动报错:构造函数依赖的String类型Bean未找到(Lombok @AllArgsConstructor引发)
问题现象
启动Spring Boot应用时抛出如下错误:
be.mypackage.dataimport.soft99.transformers.visit.VisitTransformer类的构造函数第17个参数需要类型为'java.lang.String'的Bean,但未找到。
问题背景
VisitTransformer类使用了Lombok的@AllArgsConstructor注解,类内存在一个私有String类型成员变量- 该代码此前运行正常,但从2023年10月6日起突然失效,排查Lombok更新日志未发现相关变更,怀疑是Lombok引入的隐性Bug
原因分析
Spring处理构造函数注入时,会将构造函数的所有参数视为需要从容器获取的Bean。由于@AllArgsConstructor会生成包含所有成员变量的构造函数,其中的普通String变量会被Spring误认为是需要注入的Bean,而项目中并没有定义对应的String类型Bean,因此触发报错。
解决方案
直接移除@AllArgsConstructor注解,手动编写构造函数,只纳入需要Spring注入的依赖参数,排除那个普通String成员变量;如果该String是配置项,也可以给它加上@Value注解指定值,让Spring识别参数来源,此时也能保留@AllArgsConstructor。
内容的提问来源于stack exchange,提问作者The_Unknown
相关产品推荐
相关产品推荐

