如何在Spring中注册FactoryBeans集合



我有org.springframework.beans.factory.FactoryBean弹簧接口的自定义实现。如果我创建它的实例并将其注册为bean,那么它将由spring注册,我可以使用它产生的值,正如预期的那样:

@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实例集合的bean,但没有注册工厂。。。

您需要创建一个BeanDefinitionBuilder,并在createMultiple方法内以编程方式将所有工厂bean注册到应用程序上下文中。

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

参考:Spring-用程序生成一组beans

最新更新