Как зарегистрировать коллекцию FactoryBeans весной - PullRequest
1 голос
/ 25 февраля 2020

У меня есть пользовательская реализация org.springframework.beans.factory.FactoryBean пружинного интерфейса. Если я создаю его экземпляр и регистрирую его как bean-компонент, он регистрируется весной, и я могу использовать полученные им значения, как и ожидалось:

@Bean
public FactoryBean<T> create() {
     return new CustomFactoryBean();
}

Однако у меня есть свойство, которое представляет собой список строк и для каждой строки я хочу создать отдельный экземпляр FactoryBean, затем я хочу автоматически связать коллекцию значений, где каждое значение генерируется отдельным FactoryBean. Есть ли способ сделать это?

В идеале я хочу сделать что-то подобное:

@Bean
public Collection<FactoryBean<T>> createMultiple(@Value("${someproperty}") Set<String> values) {
     return values.stream().map(s -> new CustomFactoryBean(s)).collect(toList());
}

@Bean
public SomeService createService(Collection<T> createdValues) { //every value is produced by a separate factory
     return new SomeService(createdValues);
}

Приведенный выше код, к сожалению, не работает, он просто регистрирует компонент, являющийся коллекцией экземпляров FactoryBean, но фабрики не регистрируются ...

1 Ответ

0 голосов
/ 25 февраля 2020

Вам необходимо создать BeanDefinitionBuilder и программно зарегистрировать все фабричные bean-компоненты в контексте приложения внутри метода createMultiple.

BeanDefinitionRegistry registry passed as parameterand use
registry.registerBeanDefinition(beanName, builder.getBeanDefinition());

Ссылка: Spring - Программно сгенерировать набор bean-компонентов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...