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スコープ
スレッドセーフでない場合にこのスコープを使用します。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント