【问题标题】:Spring. How bean injection works when there are more than one bean with the same qualifier?春天。当有多个具有相同限定符的 bean 时,bean 注入如何工作?
【发布时间】:2019-06-12 08:41:01
【问题描述】:

假设您有以下扩展处理器接口的类:

Interface Processor {}

class ProcesorImpl1 implements Processor {}

class ProcesorImpl2 implements Processor {}

现在,假设您在 package1 的配置类中定义了以下 bean:

class ConfigurationClass1 {

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

}

接下来,在 package2 的配置类中定义以下 bean:

class ConfigurationClass2 {

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

}

问题是Spring如何解决下面的Injection:

@Inject @Qualifier("processor") proc;

如果其中一个 Bean 带有 @Primary 注释怎么办?

【问题讨论】:

    标签: spring dependency-injection


    【解决方案1】:

    Qualifier 不适用于@Bean 注释,但@Primary 可以,如果您按类型注入 bean 并且 Spring 管理有多个这种类型的 bean,它将定义将注入的具体 bean。如果你想注入另一个非主bean,你可以用@Qualifier("beanName")注解标记它以通过名字注入它。 如果像这样定义2个同名同类型的bean

    class ConfigurationClass1 {
    
        @Bean("processor")
        public Processor processor() {
             return new ProcesorImpl1();
        }
    
    }
    
    class ConfigurationClass2 {
    
        @Bean("processor")
        public Processor anotherProcessor() {
             return new ProcesorImpl2();
        }
    
    }
    

    Spring 将在第二个中覆盖第一个加载的 bean,并且只有一个会留在容器中,因为 allowBeanDefinitionOverriding 属性默认设置为 true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多