如何在Spring的@Bean中使用标注为@Builder的类?

时间:2019-11-05 11:41:07

标签: java spring dependency-injection lombok

我有用Lombok的@Builder注释的类,并且我想要Spring的@Bean具有:

return AnnotedClass.builder().build();

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

当我在Bean中操作时:

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

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

2 个答案:

答案 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)注入您的类中,并让该工厂为您构建所需的实例。当然,您可以让工厂返回构建器的实例。这样一来,您就可以注入可以在构建器的每个实例中预设的值,而您可以在外部进行其他操作。