我有一个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类,以便摆脱上面的代码
答案 0 :(得分:0)
在类dev_descriptor.field
,@DependsOn({"A"})
顶部使用B
注释
@DependsOn annotation for managing initialization order.
}
如果缺少依赖项,Spring会抛出BeanCreationException并带有NoSuchBeanDefinitionException基本异常。