【Spring Boot】Bean のスコープをやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring の Bean には、どのくらいの期間生きるのか を決める仕組みがあります。
それが Bean のスコープ(Scope) です。

「Singleton と Prototype の違いがよくわからない」
「Web アプリだと Request とか Session とか出てくるけど何が違うの?」
そんな疑問を持つ方も多いと思います。

この記事では、Bean のスコープを やさしく・実務で役立つ形 で整理していきます。

まずはコードを見て、そこから少しずつ理解していきましょう。

まずはコードを確認

Java
@Service
@Scope("prototype")
public class GreetingService {
    public String greet() {
        return "Hello!";
    }
}

このコードでは、GreetingService
prototype スコープ の Bean として登録されます。

コードのしくみを解説

Bean のスコープとは

一言でいうと、

Bean がどのタイミングで作られ、どのくらいの期間生きるのかを決める設定

です。

Spring では、用途に応じていくつかのスコープが用意されています。

代表的なスコープをやさしく整理

Singleton(デフォルト)

アプリケーション全体で 1 つだけ作られる Bean

  • Spring Boot ではほとんどの Bean がこれ
  • メモリ効率が良い
  • 状態を持たせると危険(共有されるため)

実務では最もよく使われるスコープです。

Prototype

呼ばれるたびに新しいインスタンスが作られる Bean

  • 毎回新しいオブジェクトが必要なときに使う
  • ただし、DI された後のライフサイクルは Spring が管理しない
  • 実務で使う場面は少なめ

Request(Web アプリ向け)

1 リクエストごとに新しい Bean が作られる

  • Web アプリでよく使われる
  • リクエスト単位で状態を持ちたいときに便利

Session(Web アプリ向け)

1 セッションごとに 1 つの Bean が作られる

  • ログインユーザーごとの状態管理に使える
  • ただし使いすぎるとセッション肥大化の原因になる

Application

ServletContext 単位で 1 つだけ作られる Bean

  • Web アプリ全体で共有したい情報に使える
  • 使う場面は限定的

あわせて知っておきたいポイント

Singleton は“共有される”ことを意識する

状態を持たせると、複数のリクエストから同時にアクセスされて
予期しない動作になることがあります。

Prototype は DI と相性が悪いことも

DI された時点で 1 回だけ生成されるため、
「毎回新しいインスタンスが欲しい」という用途には向かないことがあります。

Web スコープは Web アプリでのみ有効

Request や Session は Web アプリケーションでのみ使えます。
CLI やバッチでは利用できません。

使うときに気をつけたいこと

基本は Singleton

特別な理由がなければ Singleton で十分です。

状態を持たせない

特に Singleton では、
フィールドに値を保持しないようにするのが安全です。

スコープを変えるときは理由を明確に

Prototype や Request を使う場合は、
「なぜ Singleton ではダメなのか」を意識すると設計が安定します。

まとめ

Bean のスコープは、
Bean がどのくらいの期間生きるのか
を決める大切な仕組みです。

  • Singleton → 基本はこれ
  • Prototype → 毎回新しいインスタンス
  • Request / Session → Web アプリ向け

難しく聞こえますが、
「どのタイミングで新しくなるのか」
を意識するだけで理解がぐっと進みます。


decopon
decopon

Bean のスコープは、最初は抽象的に感じるかもしれませんが、
実務で遭遇するトラブルの多くが“スコープの理解不足”から生まれます。
この記事が、あなたの開発を少しでも楽にできますように。

moco
moco

Bean さんって、生きてる時間がそれぞれ違うんだね。なんだか生き物みたいでかわいいなあ。

コメント

タイトルとURLをコピーしました