代码之家  ›  专栏  ›  技术社区  ›  Guillaume

弹簧-注入2个相同类型的豆子

  •  56
  • Guillaume  · 技术社区  · 14 年前

    我喜欢基于构造函数的注入,因为它允许我生成注入的字段 final . 我也喜欢注释驱动的注入,因为它简化了我的 context.xml .我可以用 @Autowired 只要我没有同一类型的两个参数,一切都可以正常工作。例如,我有一个类:

    @Component
    public class SomeClass {
        @Autowired(required=true)
        public SomeClass(OtherClass bean1, OtherClass bean2) {
            …
        }
    }
    

    以及应用程序上下文:

    <bean id="bean1" class="OtherClass" />
    <bean id="bean2" class="OtherClass" />
    

    应该有一种方法在类的构造函数上指定bean id SomeClass 但在文档中找不到。是可能的,还是我在梦想一个还不存在的解决方案?

    1 回复  |  直到 7 年前
        1
  •  86
  •   Bozho Michał Mech    14 年前

    @Autowired 按类型(在本例中);使用 @Qualifier 按名称自动连接,如下示例所示 from spring docs 以下内容:

    public SomeClass(
        @Qualifier("bean1") OtherClass bean1, 
        @Qualifier("bean2") OtherClass bean2) {
        ...
    }
    

    注意:与适用于字段、构造函数和多参数方法(允许在参数级别缩小限定符注释)的@autowired不同,只有具有单个参数的字段和bean属性setter方法才支持@resource。因此,如果注入目标是构造函数或多参数方法,请使用限定符。

    (下面是完整的示例)