假设我们有以下 class

public abstract class AbstractFoo {

    @PostConstruct
    private void doIt() {
       //
    }
}

public class Foo extends AbstractFoo {

    @PostConstruct
    private void doIt() {
       //
    }
}

什么时候调用AbstractFoo.doIt()和Foo.doIt()-顺序是什么?

最佳答案

相对于其在继承链中的位置, @PostConstruct 是在给定托管bean的初始化中最后执行的事情。从规格

容器必须确保:


在初始化由X或X的超类声明的所有注入字段之后,调用Bean的类型层次结构中的类X声明的

  • 初始化程序方法(即@PostConstruct)。
  • 由X或X的超类声明的所有初始化字段方法都称为之后,在X或X的超类声明的所有注入字段都被调用之后,bean的类型层次结构中的类X声明的任何@PostConstruct回调都称为,称为。初始化。


  • 专业提示:使用CDI 2.0,可以将you can use @Inject to declare an initializer method作为替代的@PostConstruct,并限制在给定的类中只能包含一个。此处的区别在于@PostConstruct仍最后执行,并且是可以保证所有注入的组件可用的唯一位置。

    关于java - @PostConstruct和继承的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45906368/

    10-13 04:33