spring:正确使用lombock-builder

2hh7jdfx  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(242)

我在使用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?

t9aqgxwy

t9aqgxwy1#

使用生成器需要默认构造函数。添加@allargsconstuctor注解时,问题出现了。因此,还必须添加@noargsconstuctor注解。这应该是你的代码的解决方案。

uidvcgyl

uidvcgyl2#

ContentDTO@Component 因此,spring试图获取并注册 ContentDTO 为此,它尝试使用lombock生成的all args构造函数创建一个示例,因为它是唯一可用的构造函数。
它失败,因为它找不到具有contentdto构造函数所期望的给定类型的注册bean。
添加 @NoArgsConstructor 或者像您那样没有参数的默认构造函数也可以工作,但与生成器无关。

相关问题