【问题标题】:Is it possible to make Spring instantiate only the parent bean in an inheritance (not instantiate child bean)?是否可以让 Spring 在继承中仅实例化父 bean(不实例化子 bean)?
【发布时间】:2016-01-14 08:14:45
【问题描述】:

我有 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 [父和子]。所以,我最终得到了错误,

多个父类型的bean

现在,这里有什么问题?如何获得正确的实例化?我应该使用@Qualifier 还是@value,如果是,在哪里和什么?

【问题讨论】:

  • 你有没有类级别的注解,比如@Component?您能否具体说明您的预期结果是什么?也许粘贴测试的代码。
  • 是的。这些类具有@Component 注释。预期的结果是不会得到错误。我只需要为父级实例化一个 bean。

标签: java spring


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2017-04-23
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多