Весна. Как работает инъекция бобов, когда существует несколько бобов с одним и тем же классификатором? - PullRequest
0 голосов
/ 18 января 2019

Предположим, у вас есть следующие классы, расширяющие интерфейс процессора:

Interface Processor {}

class ProcesorImpl1 implements Processor {}

class ProcesorImpl2 implements Processor {}

Теперь предположим, что вы определили следующий компонент в классе конфигурации в package1:

class ConfigurationClass1 {

    @Bean
    @Qualifier("processor")
    public Processor processor() {
         return new ProcesorImpl1();
    }

}

Далее вы определяете следующий bean-компонент в классе конфигурации в package2:

class ConfigurationClass2 {

    @Bean
    @Qualifier("processor")
    public Processor anotherProcessor() {
         return new ProcesorImpl2();
    }

}

Вопрос в том, как Spring разрешает следующую инъекцию:

@Inject @Qualifier("processor") proc;

Что если один из Бинов помечается @Primary?

1 Ответ

0 голосов
/ 18 января 2019

Qualifier не работает с аннотацией @Bean, но @Primary работает, и она определяет, какой конкретный компонент будет введен, если вы вводите компонент по типу и существует несколько компонентов этого типа, управляемых Spring. Если вы хотите внедрить другой неосновный компонент, вы можете пометить его аннотацией @Qualifier("beanName"), чтобы внедрить его по имени. Если вы определили 2 компонента с одинаковыми именами и такими же типами, как этот

class ConfigurationClass1 {

    @Bean("processor")
    public Processor processor() {
         return new ProcesorImpl1();
    }

}

class ConfigurationClass2 {

    @Bean("processor")
    public Processor anotherProcessor() {
         return new ProcesorImpl2();
    }

}

Spring переопределит первый загруженный бин во втором, и только один останется в контейнере, поскольку свойство allowBeanDefinitionOverriding по умолчанию установлено на true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...