我有3个类。
- 具有受保护构造函数的抽象类abstractA
- 一个类扩展了抽象类,父类具有两个构造函数
-
一个类扩展了父类,子类有一个构造函数
@CustomComponent public abstract class abstractA { Object var1; Object var2; Object var3; @Autowired protected abstractA(Object arg1, Object arg2, Object arg3){ var1 = arg1; var2 = arg2; var3 = arg3; } }
这是从抽象类扩展而来的父类
@CustomComponent
public class parent extends abstractA {
@Autowired
public parent(Object arg2, Object arg3){
this(arg1FromSomeEnum, arg2, arg3);
}
protected parent(Object arg1, Object arg2, Object arg3){
super(arg1, arg2, arg3);
}
}
这是从父扩展的子类
@CustomComponent
public class child extends parent {
@Autowired
public child(Object arg2, Object arg3){
super(arg1FromSomeEnum, arg2, arg3);
}
}
自定义组件看起来像这个
@Component
@Scope(value = "prototype")
@Inherited
public @interface CustomComponent {
String value() default "";
}
因此,当spring为特定测试实例化所有bean时,它会正确地实例化子bean。当父bean被实例化时,它得到2个bean〔parent和child〕。所以,我最终得到了错误,
父类型的多个bean
现在,这里出了什么问题?如何使实例化正确?我应该使用@Qualifier还是@value?如果是,在哪里使用?
是的,您应该使用@Qualifier注释。下面的链接将对此进行更详细的解释。使用@Qualifier注释创建唯一的bean