Java 如何在spring MVC中自动连接多级继承类

Java 如何在spring MVC中自动连接多级继承类,java,spring,spring-mvc,autowired,Java,Spring,Spring Mvc,Autowired,在我的项目中,我有三个类,它们通过多层次继承相关,如下所示 @Component @Scope("prototype") class A{ } @Component @Scope("prototype") class B extends A{ } @Component @Scope("prototype") class C extends B{ } 现在,通过使用@Autowired注释,我希望C类对象位于管理器类 @Component(value = "manager")

在我的项目中,我有三个类,它们通过多层次继承相关,如下所示

@Component
@Scope("prototype")
class A{


}

@Component
@Scope("prototype")
class B extends A{

}

@Component
@Scope("prototype")
class C extends B{

}   
现在,通过使用@Autowired注释,我希望C类对象位于管理器类

@Component(value = "manager")
@Scope("prototype")
class Manager {

@Autowired
A a;

@Autowired
B b;

@Autowired
C c;

......
}
这里,AB类对象由spring容器注入,但在为C注入对象时,它抱怨如下

nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.abc.bca.generator.sss.B] is defined: expected single matching bean but found 2: b,c
当我将@Qualifier用作C类时

@Autowired
@Qualifier('c')
C c 


但它仍然显示相同的错误,所以如何才能为C类获取对象

这不起作用,因为扩展类(子类)的bean具有父类名称作为bean名称,因为它们属于同一类型(父类类型)。所以这三个都将具有相同的bean名称
'a'
。 用不同的名称注释@Bean(name=“a”)
@Bean(name=“b”)
@Bean(name=“c”)
将解决您的问题

例如:

class A{
}

class B extends A{
}

class C extends B{
}



@Configuration
public class BeanConfiguration{
   @Bean(name = "a")
   public void A getA(){
      A a = new A();
      //bla bla bla
      return a;
   }
   @Bean(name = "b")
   public void B getB(){
      B a = new B();
      //bla bla bla
      return b;
   }

   @Bean(name = "c")
   public void C getC(){
      C c = new C();
      //bla bla bla
      return c;
   }
}

现在,您可以从任意位置自动连接A、B、C。

这不起作用,因为扩展类(子类)的bean具有父类名称作为bean名称,因为它们属于同一类型(父类类型)。所以这三个都将具有相同的bean名称
'a'
。 用不同的名称注释@Bean(name=“a”)
@Bean(name=“b”)
@Bean(name=“c”)
将解决您的问题

例如:

class A{
}

class B extends A{
}

class C extends B{
}



@Configuration
public class BeanConfiguration{
   @Bean(name = "a")
   public void A getA(){
      A a = new A();
      //bla bla bla
      return a;
   }
   @Bean(name = "b")
   public void B getB(){
      B a = new B();
      //bla bla bla
      return b;
   }

   @Bean(name = "c")
   public void C getC(){
      C c = new C();
      //bla bla bla
      return c;
   }
}

现在,您可以从任意位置自动连接A、B、C。

我认为限定符注释应该在类上,而不是字段上。试试看。我刚刚试过你的代码(没有@Qualifiers)。我看不出有任何例外。。重新检查你的问题在我的例子中,它给出了相同的例外我认为限定符注释应该在类上,而不是在字段上。试试看。我刚刚试过你的代码(没有@Qualifiers)。我看不出有任何例外。。重新检查您的问题在我的情况下,它给出了相同的例外情况我如何使用
@Bean
,如果可能,请详细说明您的问题answer@RajeshHatwar,我已经编辑了ans以进行解释。很抱歉,我尝试了与你建议的相同的方法,但是没有运气可以使用
@Bean
,如果可能,请详细说明您的建议answer@Rajesh哈特瓦尔,我已经编辑了ans的解释。很抱歉,我尝试了与你建议的相同的方法,但没有成功