簡體   English   中英

如何在Spring MVC中自動裝配多級繼承類

[英]How to autowire for multilevel inheritance class in spring MVC

在我的項目中,我有三個與多層繼承相關的類,如下

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


}

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

}

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

}   

現在,通過使用@Autowired批注,我希望Manager類中的 C類對象

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

@Autowired
A a;

@Autowired
B b;

@Autowired
C c;

......
}

在這里, AB類對象是由彈簧容器注入的,但是在為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 

要么

@Autowired
@Qualifier('c')
B 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM