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

Jua*_*ong 3 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;
}
Run Code Online (Sandbox Code Playgroud)

但这不是预期的。

这样,bean“beanList”由spring上下文维护,而不是它的元素,因此我无法列表中的每个元素指定名称和init方法或destroy方法

有任何想法吗?

shi*_*zhz 5

你可以看看BeanFactoryPostProcessor,我尝试了下面的代码,它工作得很好,BeansMyBean也可以是autowired:

@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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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