Beanに要求スコープがある場合、@PostConstructは毎回実行されます。マネージドBeanがインスタンス化された後、Beanがスコープに置かれる前に呼び出されます。このようなメソッドは引数を取らずにvoidを返し、スローされるチェック例外を宣言しないことがあります。メソッドはpublic、protected、private、package privateのいずれかです。このメソッドがチェックされていない例外をスローすると、JSF実装はマネージドBeanを処理してはなりません。そのマネージドBeanインスタンスのメンバは呼び出されません。マネージドBeanではthis question of stack
にあなたをReffering
public TrainingClassForm() {
}
@PostConstruct
public void init() {
if (this.trainingListModel.getListDataModel() != null) {
this.trainingListModel.getAllTrainingClasses();
}
}
、@PostConstruct
は、通常のJavaオブジェクトコンストラクタの後に呼び出されます。
コンストラクタが呼び出されると、Beanはまだ初期化されていません。つまり、依存関係は注入されません。 Beanが完全に初期化されていて、依存関係
@PostConstruct
を使用することができます@PostConstruct
方法では、このメソッドが呼び出されること一度だけのBeanのライフサイクルに保証契約です。 Beanがコンテナ内部で複数回インスタンス化されることはありますが(ただしありそうもありませんが)、@PostConstruct
が1回だけ呼び出されることが保証されます。
クラスがコンストラクタですべての初期化を実行する場合、@PostConstruct
は実際には冗長です。
しかし、あなたのクラスがsetterメソッドを使って依存関係を注入している場合、そのクラスのコンストラクタはオブジェクトを完全に初期化することができず、すべてのsetterメソッドが呼び出された後にいくつかの初期化を行う必要があります。また、see thisとthis
[なぜ@PostConstructを使用するのですか?](http://stackoverflow.com/q/3406555/1055089) – Vrushank