有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图在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) 个答案

  1. # 1 楼答案

    您可以看看BeanFactoryPostProcessor,我尝试了以下代码,它工作得很好,Beans依赖于MyBean也可以是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));
            }
        }
    }
    

    因为您可以完全控制MyBean实例的创建过程,所以如果有必要,您可以通过构造函数传入其他bean。希望这能对您有所帮助:-)