17.7.5 @PostConstructまたは@PreDestroy使用時の注意
-
@PostConstructまたは@PreDestroyの定義がJava EE仕様に沿っているかどうか,Webアプリケーション開始時にチェックされます。Java EE仕様に沿わない定義があった場合は,アノテーションに関するメッセージが出力され,Webアプリケーションの開始が中断されます。
-
web.xmlで<post-construct>または<pre-destroy>タグを指定している場合,Webアプリケーション開始時にメソッドがチェックされます。指定されたクラス,メソッドが見つからない場合は,KDJE39332-Eが出力されエラーとなります。
-
一つのクラス内で二つ以上のメソッドに@PostConstructまたは@PreDestroyを指定した場合,Webアプリケーションの開始時にKDJE39327-Eが出力されてエラーとなります。
-
アプリケーションサーバでは,@PostConstructまたは@PreDestroyを指定したメソッド定義をする場合,次の表に示す仕様に注意してください。@PostConstructまたは@PreDestroyを指定したメソッド定義をする場合の仕様について,次の表に示します。
表17‒19 @PostConstructまたは@PreDestroyを指定したメソッド定義をする場合の仕様 メソッド定義の仕様
Java EE仕様との違い
説明
引数を持てません。
−
引数を持つメソッドの場合,Webアプリケーション開始時にKDJE39328-Eのメッセージが出力され,エラーとなります。
検査例外をスローできます。非検査例外と同様に扱われます。
Java EE仕様では,検査例外をスローできません。
throwsの定義があるメソッドの場合,Webアプリケーション開始時にKDJE39329-Wのメッセージが出力されます。
インスタンスメソッドおよびクラス(static)メソッドで使用できます。
Java EE仕様では,staticメソッドでは指定できません。
staticメソッドの場合,Webアプリケーション開始時にKDJE39330-Wのメッセージが出力されます。
戻り値があるメソッドを使用できます。
Java EE仕様では,戻り値はvoidに限定する必要があります。
戻り値があるメソッドの場合,Webアプリケーション開始時にKDJE39331-Wのメッセージが出力されます。
public,protected,パッケージプライベート,privateのどれかを指定できます。
−
−
finalとして宣言できます。
−
−
-
@PostConstructアノテーションを指定したメソッドで例外が発生した場合,メッセージKDJE53906-Eが出力され,例外の発生したインスタンスが破棄されます。
-
Webアプリケーション開始後に初期化するクラスの場合,初期化に失敗してもクラスを使用するたびに初期化が試行されます。例えば,サーブレットへの初回リクエスト時に,@PostConstructを指定したメソッドで例外が発生した場合,次に同じサーブレットへアクセスする際にもサーブレットの初期化が試行されます。
-
@PreDestroyアノテーションを指定したメソッドで例外が発生した場合,メッセージKDJE53907-Wが出力され,Webコンテナからのオブジェクトの破棄処理が継続されます。