我在使用lombock@builder时遇到了一个问题。
在springboot应用程序中,我创建以下组件:
@Getter
@Builder
@Component
@AllArgsConstructor
public class ContentDTO {
private UUID uuid;
private ContentAction contentAction;
private String payload;
}
但当我运行应用程序时,我收到:
Error creating bean with name 'contentDTO': Unsatisfied dependency expressed through constructor parameter 0
原因:
No qualifying bean of type 'java.util.UUID' available: expected at least 1 bean which qualifies as autowire candidate
“手指指向天空”,我将lombock builder更改为custom builder,如下所示:
@Getter
@Component
public class ContentDTO {
private ContentDTO() {
}
// fields
public static Builder newBuilder() {
return new ContentDTO().new Builder();
}
public class Builder{
private Builder() {
private constructor
}
public ContentDTO build() {
return ContentDTO.this;
}
}
}
问题消失了。
很好,但我显然不明白,有什么问题!
为什么在这种情况下lombockbuilder阻止了bean的自动连接?
如何在spring应用程序上下文中正确使用lombock builder?
2条答案
按热度按时间t9aqgxwy1#
使用生成器需要默认构造函数。添加@allargsconstuctor注解时,问题出现了。因此,还必须添加@noargsconstuctor注解。这应该是你的代码的解决方案。
uidvcgyl2#
好
ContentDTO
有@Component
因此,spring试图获取并注册ContentDTO
为此,它尝试使用lombock生成的all args构造函数创建一个示例,因为它是唯一可用的构造函数。它失败,因为它找不到具有contentdto构造函数所期望的给定类型的注册bean。
添加
@NoArgsConstructor
或者像您那样没有参数的默认构造函数也可以工作,但与生成器无关。