Java @PostConstruct和继承的顺序
假设我们有以下几类Java @PostConstruct和继承的顺序,java,jakarta-ee,dependency-injection,cdi,Java,Jakarta Ee,Dependency Injection,Cdi,假设我们有以下几类 public abstract class AbstractFoo { @PostConstruct private void doIt() { // } } public class Foo extends AbstractFoo { @PostConstruct private void doIt() { // } } 当AbstractFoo.doIt()和Foo.doIt()将被调用时
public abstract class AbstractFoo {
@PostConstruct
private void doIt() {
//
}
}
public class Foo extends AbstractFoo {
@PostConstruct
private void doIt() {
//
}
}
当AbstractFoo.doIt()和Foo.doIt()将被调用时-顺序是什么?是在给定托管bean的初始化中相对于其在继承链中的位置执行的最后一件事。根据规范
容器必须确保:
- 由bean的类型层次结构中的类X声明的初始值设定项方法(即
)在所有由X或X的超类声明的注入字段初始化后被调用@PostConstruct
- bean的类型层次结构中的类X声明的任何
回调都是在调用了X或X的超类声明的所有初始化器方法后调用的,在初始化了X或X的超类声明的所有注入字段后调用的@PostConstruct
Pro提示:使用CDI2.0,作为另一种选择
@PostConstruct
,并且限制在给定类中只能有一个。这里的区别是,@PostConstruct
仍然是最后执行的,并且是唯一可以保证所有注入组件都可用的地方。我相信父类上的@PostConstruct
没有被调用。只能有一个@PostConstruct
方法。因此,不检查父类的方法。你需要通过super.doIt()
明确地调用它,是什么阻止了你简单地尝试它?@luk2302我想得到规范的答案。我搜索了,但找不到。CDI 1.0中也提供了初始化方法!