Как использовать класс, помеченный как @Builder в @Bean Spring? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть класс, помеченный @Builder от Lombok, и я хочу, чтобы Spring @Bean имел:

return AnnotedClass.builder().build();

Вопрос: как мне использовать этот @Bean для установки значений для полей с помощью компоновщика?

Когда я делаю внутри Бина:

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

, я могу позже получить установленное значение, но я хочу установить значение за пределами Бина.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Возможно, это не тот ответ, который вы ищете, но: вы не можете этого сделать. Построитель создается статическим методом в AnnotatedClass и уничтожается после вызова build(). Поэтому, когда у вас есть экземпляр AnnotatedClass, строитель исчез. А поскольку вы используете внедрение, вы, конечно, не можете давать произвольные аргументы методу bean-компонента.

Шаблон компоновщика предназначен для создания неизменяемых объектов с необязательными полями, а инъекция предназначена для подключения сервисов. Что совсем не то, что вы, очевидно, хотите.

Я рекомендую вам взглянуть на заводскую модель. Внедрите фабрику (например, AnnotatedClassFactory) в ваш класс и позвольте этой фабрике собрать вам нужные вам экземпляры. Конечно, вы можете заставить фабрику вернуть экземпляр строителя. Это позволило бы вам вводить значения, которые вы можете задавать в каждом экземпляре компоновщика, а все остальное вы можете делать снаружи.

0 голосов
/ 05 ноября 2019

Может быть, так

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

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

Я не уверен на 100%, но, возможно, вы можете использовать @Value для аннотирования параметра метода фабрики бобов.

...