代码之家  ›  专栏  ›  技术社区  ›  Sourabh Bidikar

@限定符注释在Spring中对我来说不起作用,一切看起来都很好

  •  1
  • Sourabh Bidikar  · 技术社区  · 2 年前

    我正在使用 @Qualifier 随着 @Autowired 但它给了我一个例外:

    Exception: 
      No qualifying bean of type 'com.springcore.autowiring.annotation.B' 
      available: expected single matching bean but found 2: b1,b2.
    

    班级 A 我试图自动连接的对象 B :

    public class A {
        
        @Autowired
        @Qualifier("b2")
        private B b;
    
        public A( B b) {
            this.b = b;
        }
        
        public B getB() {
            return b;
        }
    
        @Override
        public String toString() {
            return "A ["+this.b+"]";
        }
        
        public void setB(B b) {
            this.b = b;
        }
        
    }
    

    仅使用时工作良好 @自动连线 只有一个类型的bean B .

    这是课堂 B :

    public class B {
    
      private String name;
    
      @Override
      public String toString() {
        return "B [name=" + name + "]";
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    }
    

    这是我的 config.xml :

    <context:annotation-config /> <!-- this is our bean metadata -->
    <bean class="com.springcore.autowiring.annotation.B"
          id="b1"
          name="b1"
          p:name="Xyz" />
    <bean class="com.springcore.autowiring.annotation.B"
          id="b2"
          name="b2"
          p:name="Abc" />
    <bean class="com.springcore.autowiring.annotation.A"
          name="ObjA"> </bean>
    </beans>
    
    2 回复  |  直到 2 年前
        1
  •  0
  •   Rami toumi    2 年前

    尝试在构造函数上使用@Autowired,在构造函数参数上使用@Qualifier(“b2”),如下所示:

    public class A {
    
    private B b;
    
    @Autowired
    public A(@Qualifier("b2") B b) {
    
        this.b = b;
    }
    
    public B getB() {
        return b;
    }
    @Override
    public String toString() {
        return "A ["+this.b+"]";
    }
    
    public void setB(B b) {
        this.b = b;
    }
    

    }

    它对我有用。

        2
  •  0
  •   Seanimus JuWon Lee    2 年前

    我认为spring混淆了A类中的场注入和构造器。 因此,如果您想使用字段注入,请删除类A中的构造函数。 或者可以像这样使用构造函数注入。

    public class A {
        private B b;
    
        @Autowired 
        public A(@Qualifier("b2") B b) {
            this.b = b;
        }
    }