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

Raj*_*war 1 java spring spring-mvc autowired

在我的项目中,我有三个类,它们通过多级继承相关联

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


}

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

}

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

}   
Run Code Online (Sandbox Code Playgroud)

现在通过使用@Autowired注释我想在Manager类中使用C类 Object

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

@Autowired
A a;

@Autowired
B b;

@Autowired
C c;

......
}
Run Code Online (Sandbox Code Playgroud)

这里AB类对象是由弹簧容器注入的,但是在为C注入Object时,它正在抱怨如下

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
Run Code Online (Sandbox Code Playgroud)

当我将@Qualifier用于C类时

@Autowired
@Qualifier('c')
C c 
Run Code Online (Sandbox Code Playgroud)

要么

@Autowired
@Qualifier('c')
B c 
Run Code Online (Sandbox Code Playgroud)

它仍然显示相同的错误,所以我怎样才能获得C类的Object .

may*_*a16 5

这不起作用,因为扩展类(子类)的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;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以从任何地方自动装配A,B,C.