是否有可能使Spring仅在继承中实例化父bean(而不是实例化子bean)?

时间:2016-01-14 08:14:45

标签: 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;
      }
    
    }
    
  4. 这是从抽象类

    扩展的父类
    @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,如果是这样,那么什么?

1 个答案:

答案 0 :(得分:0)

是的,你应该使用@Qualifier注释。 以下链接更详细地解释了它。 Using @Qualifier annotation to create unique beans