当前位置: 首页 > 知识库问答 >
问题:

Spring当有多个bean具有相同的限定符时,bean注入如何工作?

融烨华
2023-03-14

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

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如何解决以下喷射:

@Inject @Qualifier("processor") proc;

如果其中一个bean被注释为@Primary呢?

共有1个答案

欧阳嘉
2023-03-14

限定符不适用于Bean注释,但主Bean注释适用,如果您按类型注入Bean,并且有多个这种类型的Bean由Spring管理,它将定义注入的具体Bean。如果要注入另一个非主bean,可以用限定符(“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中重写第一个加载的bean,并且只有一个bean将留在容器中,因为默认情况下,allowBeanDefinitionOverriding属性设置为true。

 类似资料:
  • 问题内容: 我从Google的AdWords网站获取数据,该网站包含多个具有相同元素的元素。 您能否解释为什么以下3个查询没有得到相同答案(2)? 现场演示 HTML: JS: 问题答案: 根据W3C规范,具有2个具有相同ID的元素不是有效的html。 当您的CSS选择器只有一个ID选择器(并且未在特定上下文中使用)时,jQuery使用本机方法,该方法仅返回具有该ID的第一个元素。 但是,在其他两

  • Spring配置:我创建了2个bean,引用了相同的类但不同的数据库会话。 现在有没有办法将id为“abc1”的bean设置为用于自动装配的默认bean,并在像这样明确提到时使用abc2进行自动装配: 解决方案: 使abc1默认为自动连接。 为了创建abc2的实例,我们可以使用:

  • 我正在开发一个遗留的JSF应用程序,我们正在慢慢地将其移植到Spring MVC。我们正在使用Spring Security来控制登录信息。在用户登录之后,JSF页面全局地实例化一个在任何地方都使用的会话作用域bean。我想更改应用程序,这样我们就可以先进入用Spring MVC开发的页面。 我尝试的一种方法是将bean转换为spring bean,并将其注入JSF,但不幸的是,这需要对bean进

  • 我有两个spring bean类实现相同的接口。 你能给我一个建议吗。

  • 问题内容: 有没有一种方法可以用XML编写Spring bean,以便在构造函数具有varargs参数类型时使用构造函数注入?IE,有没有一种方法可以指定数组,也可以指定列表? 例如: 问题答案: 因为是您可以使用的数组:

  • 当使用指定的bean注入点时,如何扩展命名bean? 我的项目1由3个spring Bean组成: 这个项目被捆绑到一个jar中,并作为我的第二个项目的依赖项包含在内: 我想发生的是将bean注入到的setter方法中。不幸的是,我收到了一个错误。 组织。springframework。上下文注释。冲突BeanDefinitionException:bean类[Bean1Child]的注释指定的b