我们假设我们有以下类
public abstract class AbstractFoo {
@PostConstruct
private void doIt() {
//
}
}
public class Foo extends AbstractFoo {
@PostConstruct
private void doIt() {
//
}
}
当调用AbstractFoo.doIt()和Foo.doIt()时 - 命令是什么?
答案 0 :(得分:4)
@PostConstruct
是在给定托管bean的初始化中执行的 last 事件,相对于它在继承链中的位置。来自规范
容器必须确保:
在X的声明或X的超类已初始化的所有注入字段之后,调用bean类型层次结构中由类X声明的初始化方法(即
@PostConstruct
)。在X声明的所有初始化方法或X的超类被称为之后,在bean的类型层次结构中由类X声明的任何
@PostConstruct
回调都被调用,在X或超类X声明的所有注入字段都已初始化之后。
专业提示:使用CDI 2.0,you can use @Inject
to declare an initializer method作为替代@PostConstruct
,并且您可以在给定的课程中只拥有一个限制。这里的不同之处在于@PostConstruct
仍然最后执行,这是唯一可以保证所有注入的组件都可用的地方。
答案 1 :(得分:0)
我相信没有调用父类上的 @PostConstruct
。只能有一种 @PostConstruct
方法。所以不检查父类的方法。您需要通过 super.doIt()