SpringのBeanにおける@Scopeアノテーション

SpringのBeanにおける@Scopeアノテーション

SpringのBeanにはスコープがあってデフォルトはシングルトン(singleton)です。

これがBeanによってはアプリケーション単位だとか、HTTPリクエスト単位でDI管理したい、とかになってくるとスコープを細かく指定していく必要があります。

このスコープには制約があります。

例えばsingletonのクラスAに依存するクラスBのスコープがrequestだとエラーとなります。

この点は注意が必要です。

scope 役割
singleton DIコンテナでインスタンスを一つ生成する
prototype アクセス時に毎回インスタンス生成する
request HTTPリクエスト単位でインスタンス生成する
session HTTPセッション単位でインスタンス生成する
application サーブレットコンテキスト単位でインスタンス生成する

クラスAのスコープをprototypeにすれば毎回インスタンス生成しますので、依存するクラスBがHTTPリクエスト単位のrequestスコープでもエラーになりません。

クラスA クラスB OK/NG
singleton request NG
prototype request OK
prototype singleton OK
singleton prototype OK

singletonスコープ

スコープアノテーションの引数を省略すればデフォルトはsingletonスコープです。

requestスコープ

requestスコープを使用したい場合は、HTTPリクエストからレスポンスが返るまでの間だけインスタンス生成し、そのあとは破棄したい場合にrequestスコープを使用します。

prototypeスコープ

スレッドセーフでない場合に子のスコープを使用します。

SpringのBeanにおける@Scopeアノテーション

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA