如何在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 成为构建器的一个实例。这将允许您注入可以在构建器的每个实例中预设的值,您可以在外部完成其余的工作。
我已经 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 成为构建器的一个实例。这将允许您注入可以在构建器的每个实例中预设的值,您可以在外部完成其余的工作。