是否可以让Spring在继承中只实例化父bean(而不是实例化子bean)

  • 本文关键字:实例化 bean Spring 继承 是否 java spring
  • 更新时间 :
  • 英文 :


我有3个类。

  1. 具有受保护构造函数的抽象类abstractA
  2. 一个类扩展了抽象类,父类具有两个构造函数
  3. 一个类扩展了父类,子类有一个构造函数

    @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

最新更新