如何根据Spring中的配置创建多个相同类型的bean?

时间:2017-04-07 07:44:06

标签: java spring

我正在尝试在Spring中创建指定数量的相同类型的bean。

我试过了:

@Bean(name = "beanList")
public List<MyBean> beanList(
        @Value("${number:1}") int number
        ) {
    List<MyBean> beanList = new ArrayList<>(number);
    for (int i = 0; i < number; i++) {
        beanList.add(new MyBean());
    }
    return beanList;
}

但这不是预期的。

通过这种方式,bean“beanList”由spring上下文维护,而不是它的元素,所以我不能为列表中的每个元素指定名称和init方法或destroy方法

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以查看BeanFactoryPostProcessor,我尝试使用以下代码,但它工作正常,Bean取决于MyBean也可能autowire d:< / p>

@Configuration
public class AppConfig implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for (int i = 0; i < 3; i++) {
            System.out.println("register my bean: " + i);
            beanFactory.registerSingleton("bean-" + i, new MyBean("MyBean-" + i));
        }
    }
}

由于您可以完全控制MyBean实例的创建过程,因此如果有必要,您可以通过构造函数简单地传递其他bean。希望这对你有所帮助: - )