У меня есть несколько бобов:
@Bean
public MyBean myBean1(){
return new MyBean(1);
}
@Bean
public MyBean myBean2(){
return new MyBean(2);
}
@Bean
public MyBean myBean3(){
return new MyBean(3);
}
Я хотел бы объединить их в одну коллекцию и передать в качестве аргумента. Что-то вроде:
@Bean
public MyFinalBean myFinalBean(Collection<MyBean> myBeans){
return new MyFinalBean(myBeans);
}
Есть ли возможность комбинировать бины только с аннотациями? Т.е. без использования отдельного метода с applicationContext.getBeansOfType(MyBean.class);?
Все они одного класса. Я использую Spring 5. Не уверен в других версиях, но в этой версии у каждого Бина есть имя своего метода. Т.е. использовать @Bean (name = "myBean1") не обязательно.
Я знаю, что Spring будет использовать имя метода для имени bean-компонента, но мы должны явно указать имя для лучшей отладки
Да, полностью с вами согласен. Но я думаю, что это лишняя информация по этому вопросу. Вот почему я опустил имена бобов.




Spring может автоматически подключать все bean-компоненты, реализующие один и тот же интерфейс, в одну коллекцию этого интерфейса. Следующий код работает правильно:
@Bean
public MyFinalBean myObject(List<MyBean> lst) {
return new MyFinalBean(lst);
}
Спасибо! Я просто этого не знала. Это то, что мне нужно.
3 компонента
MyBean, они одного или разных классов? Я просто хочу убедиться, что вы не создаете три компонента одного типа без явного имени.