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

问题描述 投票:0回答:2

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

return AnnotedClass.builder().build();

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

[当我在Bean中执行操作时:

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

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

java spring java-ee dependency-injection lombok
2个回答
0
投票

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

生成器模式用于创建带有可选字段的不可变对象,而注入则用于连接服务。这显然不是您显然想要的。

我建议您看一下出厂模式。将一个工厂(例如AnnotatedClassFactory)注入您的类中,然后让该工厂为您构建所需的实例。当然,您可以让工厂返回构建器的实例。这将允许您注入可以在构建器的每个实例中预设的值,而您可以在外部进行其余操作。


0
投票

也许是这样

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.