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