如何在Spring的@Bean中使用注解为@Builder的class?

How to use class annoted as @Builder in Spring's @Bean?

我已经 class 注释了 Lombok 的 @Builder,我想要 Spring 的 @Bean 具有:

return AnnotedClass.builder().build();

问题是:我应该如何使用这个@Bean 通过构建器为字段设置值?

当我在Bean里面做的时候:

return AnnotedClass.builder().field1(value1).build();

然后我可以稍后获取设置值,但我想从 Bean 外部设置值。

也许是这样

    @Value("${value.from.properties}")
    String beanParam;

    @Bean
    public beanName() {
       return AnnotedClass.builder().firstParameter(beanParam).build();
    }

我不是 100% 确定,但也许您可以使用 @Value 来注释 bean 工厂方法参数。

这可能不是您正在寻找的答案,但是:您不能那样做。构建器由 AnnotatedClass 中的静态方法创建,并在 build() 调用后销毁。因此,当您拥有 AnnotatedClass 的实例时,构建器就消失了。而且由于您正在使用注入,因此您当然不能为 bean 方法提供任意参数。

构建器模式旨在创建具有可选字段的不可变对象,注入旨在连接服务。这显然不是你想要的。

我建议你看看工厂模式。将一个工厂(例如 AnnotatedClassFactory)注入您的 class 并让该工厂为您构建您需要的实例。当然,您可以让工厂 return 成为构建器的一个实例。这将允许您注入可以在构建器的每个实例中预设的值,您可以在外部完成其余的工作。