为什么父类中的@PostConstruct方法在子类中的@PostConstruct方法之后执行?

时间:2016-04-26 10:20:40

标签: java spring annotations

我对下面代码的结果感到有点困惑 ParentController:

@Controller
public abstract class ParentController{

@PostConstruct
public void init(){
    System.out.println("Parent-----PostConstruct");
}


public ParentController(){
    System.out.println("Parent-----constructor");
}
} 

ChildController:

@Controller
public class ChildController extends ParentController {
 @PostConstruct
public void init() {
    System.out.println("Child-----PostConstruct");
}

public ChildController(){
    System.out.println("Child-----constructor");
}
}

结果如下:
母公司-----构造
儿童-----构造
儿童----- PostConstruct
家长----- PostConstruct

我不知道为什么父母的postConstruct是在孩子的postContruct之后。

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为您要覆盖@PostConstruct方法。

发生了什么事

  1. 子类的构造函数被调用。
  2. 子类调用的构造函数super
  3. 父类的构造函数称为
  4. 父类的构造函数被执行
  5. 父类的构造函数完成
  6. 子类的构造函数被执行
  7. 子类的构造函数完成
  8. @PostConstruct子类的调用,执行和完成(因为我们将其称为子类的构造函数)
  9. @PostConstruct父类的调用,执行和完成(因为我们称为父类的构造函数)