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)
这里A和B类对象是由弹簧容器注入的,但是在为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 .
这不起作用,因为扩展类(子类)的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.
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |