はじめに
みなさま、SpringBootのBeanに適切なスコープを設定できておりますか?
執筆者はこの設定誤りで痛い目にあったことがあるので、戒めも兼ねてスコープについて
まとめてみます。
スコープについて
singletonスコープ
DIコンテナでインスタンスを一つ生成する
スコープアノテーションの引数を省略すればデフォルトはsingletonスコープです。
requestスコープ
アクセス時に毎回インスタンス生成する
prototypeスコープ
HTTPリクエスト単位でインスタンス生成する
sessionスコープ
HTTPセッション単位でインスタンス生成する
applicationスコープ
サーブレットコンテキスト単位でインスタンス生成する
執筆者が体験したトラブル
Webシステムにて画面から指定したPDFをダウンロードする機能です。
ここでFileBeanにはスコープの設定をしておりませんでした。
上述した通り、スコープの設定をしない場合、デフォルトでシングルトンになってしまいます。
つまり何が起こったかというと、ユーザAが「発注書」をD/Lしようとすると、「見積書」がD/L
されてしまったというわけです・・・。
1トランザクションは一瞬で処理が完結するため、気づきにくいですが
皆さん気を付けていただければと思います。
参考