Как объединить bean-компоненты одного типа в массив, используя только аннотации?

У меня есть несколько бобов:

@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);?

3 компонента MyBean , они одного или разных классов? Я просто хочу убедиться, что вы не создаете три компонента одного типа без явного имени.

Mạnh Quyết Nguyễn 07.05.2018 20:43

Все они одного класса. Я использую Spring 5. Не уверен в других версиях, но в этой версии у каждого Бина есть имя своего метода. Т.е. использовать @Bean (name = "myBean1") не обязательно.

Oleksandr 07.05.2018 21:05

Я знаю, что Spring будет использовать имя метода для имени bean-компонента, но мы должны явно указать имя для лучшей отладки

Mạnh Quyết Nguyễn 07.05.2018 21:06

Да, полностью с вами согласен. Но я думаю, что это лишняя информация по этому вопросу. Вот почему я опустил имена бобов.

Oleksandr 07.05.2018 21:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring может автоматически подключать все bean-компоненты, реализующие один и тот же интерфейс, в одну коллекцию этого интерфейса. Следующий код работает правильно:

@Bean
public MyFinalBean myObject(List<MyBean> lst) {
    return new MyFinalBean(lst);
}

Спасибо! Я просто этого не знала. Это то, что мне нужно.

Oleksandr 07.05.2018 21:13

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