[英]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;
......
}
在這里, A和B類對象是由彈簧容器注入的,但是在為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.