春豆继承混乱

时间:2018-12-17 01:10:39

标签: java spring inheritance

我有一个Spring Component类,如下所示:

@Component
public class A{
   @Value("${some.value}")
   private String s;

   @PostConstruct
   public void setup(){// initialization of private instance variables}

   public void execute(){ //code that makes use of the initialized instance variables }
}

我还有另一个扩展A的类:

@Component
public class B extends A{
   @PostConstruct
   public void setup{
      super.execute();
   }
}

所以现在我面临的问题是,当我启动Spring引导应用程序时,类B在类A之前构造。结果,没有构造A.setup(),这导致在发生NPE时抛出NPE。在B.setup()中调用super.execute(),因为所有实例变量都在A.setup()中初始化。

为避免这种情况,我提出了以下建议:

@Component
public class B extends A{
    @PostConstruct
       public void setup{
           super.setup();
           super.execute();
       }
}

我想知道是否有办法在B类之前先构造A类,以便摆脱上面的代码

1 个答案:

答案 0 :(得分:0)

在类dev_descriptor.field@DependsOn({"A"})顶部使用B注释

@DependsOn annotation for managing initialization order.

}

  

如果缺少依赖项,Spring会抛出BeanCreationException并带有NoSuchBeanDefinitionException基本异常。