0

私たちの Bean の 1 つで、メモリ内のファイルベースのデータを読み込んでいます。

ApplicationContextListener からこれを行う方がよいでしょうか。たとえば、Bean の init() メソッドを呼び出すか、この init() メソッドに @PostConstruct を追加してコンテナが自動的に実行するようにしますか?

4

1 に答える 1

0

以下を使用できます。
1. @PostConstruct
2.InitializingBeanインターフェイス
3.<bean class="your bean class" init-method="your init method"/>

属性 : init-method : Bean プロパティの設定後に呼び出すカスタム初期化メソッドの名前。メソッドは引数を持たない必要がありますが、例外をスローする可能性があります。これは、Spring の InitializingBean インターフェースを実装するか、メソッドを PostConstruct アノテーションでマークする代わりの方法です。

それらは代替手段です: プログラムに完全に注釈が付けられている場合は注釈を使用し、XML を使用している場合は XML を使用します (私は混合が好きではないので、annot または xml を使用して機能を実装するかどうかを自問する必要はありません)。

編集:

  • コンテキスト リスナー: コンテキストが更新されるたびに呼び出されます (通常は起動時に 1 回)
  • InitializingBeanまたは@PostConstruct: bean が作成されるたびに呼び出される bean のライフサイクルに適用します (スコープによって異なります)

コンテキストリスナーを使用する場合:

  1. call init() は、Bean の init() が終了するまで待機しますが、コンテナーのライフサイクルのどの時点で呼び出されるかは確かです。
  2. 遅延初期化の可能性を失いました。
  3. ただし、エラーから回復する可能性が得られます (おそらく、メモリにデータがなくても動作することを受け入れる可能性があります)

あなたInitializingBeanと:

  1. have care Bean のスコープは「シングルトン」です (それ以外の場合は、Bean を配線するたびに init() メソッドが呼び出されます)。
  2. Bean の初期化サイクルが手元にないため (または回復がより困難になるため)、障害が発生した場合の回復の可能性を失いました。
  3. lazy-init を実行できるようになります (起動時間が短縮されます)

あなたの場合、lazy-init なしでシングルトン Bean を使用していて、障害が発生した場合のエラー回復が必要ない場合、違いはまったくありません。

于 2013-08-07T14:27:33.227 に答える