Helpers - компьютеры, интернет, программирование

Создание нескольких экземпляров Bean с разными вещами, автоматически подключенными к ним.

Я пытаюсь получить инъекцию зависимостей Spring Boot, чтобы позволить мне сделать следующее:

interface MyBean

@Component
class MyBeanA : MyBean

@Component
class MyBeanB : MyBean

@Component
class MyBeanConsumer(myBean: MyBean)

Здесь Spring жалуется на наличие нескольких bean-компонентов типа MyBean. Я хотел бы создать два экземпляра MyBeanConsumer. Один с MyBeanA и один с MyBeanB. Мне нужно сделать это для нескольких bean-компонентов, поэтому я пытаюсь избежать шаблонных классов конфигурации, подобных этому:

@Configuration
class MyBeanConfiguration {
    @Bean
    fun consumers(myBeans: List<MyBean>) = myBeans.map { MyBeanConsumer(it) }
}

Возможно ли это весной?


  • Тогда у вас будет несколько экземпляров MyBeanConsumer. Как вы хотите их использовать. Я имею в виду, что где-то в вашей программе вы хотите использовать один из них, а где-то другой? или вы хотите перебрать их и что-то сделать. 18.10.2020
  • Да, наличие нескольких экземпляров — это план. Я хочу использовать их как список. 18.10.2020

Ответы:


1

вы можете использовать аннотацию Qualifier и указать имя запрашиваемого компонента.

вы можете посетить этот Spring @Autowired и @Qualifier

17.10.2020
  • Это не отвечает на вопрос. Мне не нужен один экземпляр с квалифицированным параметром. Мне нужен экземпляр для каждого возможного параметра. 18.10.2020

  • 2

    Если везде в вашей программе вы хотите внедрить их как список bean-компонентов, вы можете использовать этот подход.

    @Configuration public MyConfigurationClass {
            
            @Bean
            @Qualifier("mylist")
            public List<MyType> configure() {
                //create your dynamical list here
            }
     }
    

    Но если вы хотите использовать их как отдельные bean-компоненты где-то в своей программе, а также хотите внедрить их все как список где-то еще, вы можете сделать это следующим образом:

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

    Прочтите следующий ответ для получения дополнительной информации: ">Как создать несколько bean-компонентов одного типа в соответствии с конфигурацией в Spring?

    17.10.2020
  • Это именно то, чего я хочу избежать: шаблон для каждого из этих случаев. Я указал это в вопросе. 26.10.2020
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..