我正在尝试在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方法
有什么想法吗?
答案 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。希望这对你有所帮助: - )