Как создать несколько бинов одного типа в соответствии с конфигурацией в Spring?

Я пытаюсь создать указанное количество бинов одного типа в Spring.

Я пробовал:

@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;
}

Но это не то, что ожидалось.

Таким образом, beanList beanList поддерживается контекстом Spring, а не его элементами, поэтому я не могу указать метод имени и инициализации или метод уничтожения для каждого элемента в списке.

Есть идеи?

1 ответ

Решение

Вы можете взглянуть на BeanFactoryPostProcessor, я попробовал следующий код, и он работает просто отлично, Beanзависит от MyBean также может быть autowireд:

@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 Например, вы можете просто передать другие компоненты через конструктор, если это необходимо. Надеюсь, что это может быть полезно для вас:-)

Другие вопросы по тегам