Springのスコープの詳細説明
Springフレームワークでは、スコープとはBeanのライフサイクルと可視性を指定する仕組みです。Springでは、アプリケーションの要件に応じて適切なスコープを選択できるように、さまざまなスコープオプションが提供されています。以下に、よく使用されるスコープオプションとその詳細を示します。
- シングルトン(デフォルト): Springのデフォルトスコープで、アプリケーション全体でBeanが1つのインスタンスのみを保持することを示します。このBeanをどこで注入しても常に同じインスタンスを取得します。Beanの定義でのscope属性を使用して「singleton」を指定することで、このスコープを明示的に設定できます。
- プロトタイプのスコープは、そのインスタンスには寿命がないことを示しています。つまり、リクエストのたびに、またはインジェクション時に新しいインスタンスが作成されます。Springは、このBeanが取得されるたびに新しいオブジェクトを作成します。のscope属性をprototypeに設定することで、スコープを明示的にプロトタイプに指定できます。
- HTTPリクエストのライフサイクルと同じになるBeanのライフサイクルを表します。リクエストごとに新しいインスタンスを作成し、リクエスト終了後に廃棄します。通常、各リクエストを処理するコントローラーBeanでWebアプリケーションで使用されます。
- セッション:あるBeanのライフサイクルがユーザーのセッションのライフサイクルと同じになることを示します。ユーザーセッションごとに新しいインスタンスが作成され、セッション終了後に破棄されます。通常、Webアプリケーションで各ユーザーのステートを管理するBeanに使用されます。
- グローバルセッション:セッションスコープに似ていますが、ポートレットベースのウェブアプリケーションに適用されます。グローバルセッションは、複数のポートレット間のセッションを表します。
上記に加え、SpringではApplication(ServletContextと同じライフサイクル)、WebSocket(WebSocketセッションと同じライフサイクル)、Custom(カスタムスコープ)など、いくつかの他のスコープオプションがあります。具体的なアプリケーションシナリオに応じて適切なスコープを選択できます。
スコープはBean定義にのみ有効であることに注意してください。シングルトンスコープのBeanにプロトタイプスコープのBeanを注入する場合、プロトタイプスコープのBeanはアプリケーション起動時に作成されますが、アプリケーション全体で1つのインスタンスのみになります。シングルトンスコープのBeanに異なる複数のインスタンスのBeanを注入する場合は、ObjectFactoryまたはProviderタイプの注入を使用できます。