【发布时间】:2016-01-14 08:14:45
【问题描述】:
我有 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 [父和子]。所以,我最终得到了错误,
多个父类型的bean
现在,这里有什么问题?如何获得正确的实例化?我应该使用@Qualifier 还是@value,如果是,在哪里和什么?
【问题讨论】:
-
你有没有类级别的注解,比如@Component?您能否具体说明您的预期结果是什么?也许粘贴测试的代码。
-
是的。这些类具有@Component 注释。预期的结果是不会得到错误。我只需要为父级实例化一个 bean。