8

Guice で作成したオブジェクトをシャットダウン/閉じるための推奨パターンはありますか?

私が目指しているライフサイクルは次のとおりです。

  1. Guice モジュールの準備
  2. インジェクターを作成する
  3. コードでインジェクターを使用してオブジェクトを取得します ( injector.getInstance(Foo.class))
  4. ...
  5. 上記のオブジェクト (ファイル ハンドル、TCP 接続など) によって保持されているすべてのリソースを閉じます。これを決定論的なステップにしたいです(「GCが実行される日」ではありません)。
4

1 に答える 1

2

これを決定論的なステップにしたいです(「GCが実行される日」ではありません)。

申し訳ありませんが、Java はあなたにとって不適切な言語です。DI フレームワークは、オブジェクトへのすべての参照がいつなくなったかを知りません。これを知っているのは GC だけです。

「クローズ可能な」リソースがある場合は、try/finally パターンを使用してそれをクローズします (以下を参照)。

Closable c = // ...
try {
   c.use();
} finally {
   c.close();
}

ここで、少しパドルを戻します。Guice は、スコープの開始時と終了時を知ることができます。カスタム スコープは、終了時にクリーンアップ ステップを実行できます。このスコープはプロキシを返すことさえできるため、許可されたスコープの外でオブジェクトにアクセスしようとすると、オブジェクトは無効になります。

(ああ、ColinD に +1 - プロバイダーを挿入します。:)

編集: Guiceyfruitは、ライフサイクルをサポートするように継ぎ目があります

于 2009-11-05T10:25:49.323 に答える