如果bean具有请求范围,则@PostConstruct将每次都执行。它将在托管bean实例化之后,但在bean放入作用域之前调用。这样的方法没有参数,返回void,并且可能不会声明一个检查的异常被抛出。方法可能是公开的,受保护的,私有的或私有的。如果该方法抛出未经检查的异常,则JSF实现不得将托管bean投入使用,并且不会调用该托管bean实例上的其他节点。
public TrainingClassForm() {
}
@PostConstruct
public void init() {
if (this.trainingListModel.getListDataModel() != null) {
this.trainingListModel.getAllTrainingClasses();
}
}
Reffering你this question of stack
在托管bean,@PostConstruct
是常规的Java对象的构造后调用。
当构造函数被调用时,bean尚未初始化 - 即没有注入依赖关系。 在@PostConstruct
方法的bean被完全初始化,您可以使用依赖
@PostConstruct
是保证这种方法将在bean的生命周期调用一次合同。它可能发生(尽管不太可能)bean在其内部工作中被容器多次实例化,但它确保@PostConstruct
只会被调用一次。
如果您的类在构造函数中执行了所有初始化,那么@PostConstruct
确实是多余的。然而,如果你的类使用setter方法注入了它的依赖项,那么这个类的构造函数不能完全初始化这个对象,有时需要在调用所有setter方法后执行一些初始化操作,因此@PostConstruct
另外see this和this
[为什么使用@PostConstruct?](http://stackoverflow.com/q/3406555/1055089) – Vrushank 2013-05-14 11:32:35