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