我用Lombok的@Builder注释了类,并且我想让Spring的@Bean具有:
return AnnotedClass.builder().build();
问题是:我应该如何使用此@Bean通过构建器设置字段的值?
[当我在Bean中执行操作时:
return AnnotedClass.builder().field1(value1).build();
然后,我以后可以获取设置的值,但是我想从Bean外部设置值。
这可能不是您要寻找的答案,但是:您不能那样做。构建器是通过AnnotatedClass
中的静态方法创建的,并且在build()
调用后被销毁。因此,当您拥有AnnotatedClass
的实例时,构建器就消失了。而且,由于您正在使用注入,因此您当然不能为bean方法提供任意参数。
生成器模式用于创建带有可选字段的不可变对象,而注入则用于连接服务。这显然不是您显然想要的。
我建议您看一下出厂模式。将一个工厂(例如AnnotatedClassFactory
)注入您的类中,然后让该工厂为您构建所需的实例。当然,您可以让工厂返回构建器的实例。这将允许您注入可以在构建器的每个实例中预设的值,而您可以在外部进行其余操作。
也许是这样
@Value("${value.from.properties}")
String beanParam;
@Bean
public beanName() {
return AnnotedClass.builder().firstParameter(beanParam).build();
}
我不确定100%,但也许您可以使用@Value
注释bean工厂方法参数。