Springのスコープとは?
こんにちは。ゆうせいです。
Spring Bootを使っていると、@Service
や @Component
で登録したクラスが どのように管理されるのか 気になりませんか?
実は、Springの スコープ(Scope) という概念を知ることで、Beanのライフサイクルや管理方法を理解しやすくなります。
今回は、Springのスコープとは何か?どんな種類があるのか?どう使い分けるのか? を詳しく解説します!
1. スコープとは?
Springにおける スコープ(Scope) とは、Bean(Springが管理するオブジェクト)の生存期間(ライフサイクル)やインスタンスの管理方法 を決める仕組みです。
例えば、
- 毎回新しいインスタンスを作るのか?
- 1つのインスタンスを全体で共有するのか?
- 特定のユーザーごとに別のインスタンスを作るのか?
といった制御が可能になります。
2. Springのスコープの種類
Springでは、主に以下の 5種類 のスコープが用意されています。
スコープ名 | 説明 | 用途 |
---|---|---|
singleton | (デフォルト) アプリ全体で1つのインスタンスを共有 | 設定情報、ユーティリティクラス |
prototype | リクエストのたびに新しいインスタンスを作成 | ステートフル(状態を持つ)なクラス |
request | HTTPリクエストごとに1つのインスタンスを作成 | Webアプリのリクエスト単位のデータ管理 |
session | ユーザーセッションごとに1つのインスタンスを作成 | ユーザーごとのデータ管理 |
application | アプリケーション全体で1つのインスタンスを共有 | アプリケーション設定の管理 |
※ request
, session
, application
スコープは、Spring Webアプリ(Spring MVCなど)で使用されます。
では、それぞれのスコープを 具体的なコードとともに 見ていきましょう!
3. シングルトン(singleton
)
特徴
- Springのデフォルトスコープ
- アプリケーション全体で1つのインスタンスを共有
- BeanはSpringコンテナ起動時に作られる
- 状態を持たない(ステートレス)クラス向け
実装例
import org.springframework.stereotype.Service;
@Service
public class SingletonService {
public SingletonService() {
System.out.println("SingletonService インスタンス作成!");
}
}
この SingletonService
を呼び出してみると…
@Autowired
private SingletonService singletonService1;
@Autowired
private SingletonService singletonService2;
singletonService1
と singletonService2
は同じインスタンス になります。
SingletonService インスタンス作成!(1回だけ)
✅ シングルトンは、状態を持たないクラス(ユーティリティ系など)に適している!
4. プロトタイプ(prototype
)
特徴
- リクエストのたびに新しいインスタンスを作成
- Springコンテナが管理するのはインスタンス作成のみ(ライフサイクル管理なし)
- 状態を持つ(ステートフル)なオブジェクトに適している
実装例
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@Service
@Scope("prototype")
public class PrototypeService {
public PrototypeService() {
System.out.println("PrototypeService インスタンス作成!");
}
}
この PrototypeService
を複数回呼び出すと…
@Autowired
private PrototypeService prototypeService1;
@Autowired
private PrototypeService prototypeService2;
毎回 異なるインスタンス が生成されます。
PrototypeService インスタンス作成!(2回)
✅ プロトタイプスコープは、状態を持つクラス(ユーザーの一時データなど)に適している!
5. リクエスト(request
)
特徴
- HTTPリクエストごとに新しいインスタンスが作成される
- Webアプリ(Spring MVCなど)で使用
- リクエストごとに異なるデータを管理するクラスに適している
実装例
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
@Component
@RequestScope
public class RequestScopedBean {
public RequestScopedBean() {
System.out.println("RequestScopedBean インスタンス作成!");
}
}
Webアプリで RequestScopedBean
を呼び出すと、リクエストごとに異なるインスタンス が作成されます。
✅ リクエストスコープは、リクエストごとに異なるデータを持つクラス(リクエストのトラッキング情報など)に適している!
6. セッション(session
)
特徴
- ユーザーセッションごとに1つのインスタンスを保持
- ログインユーザーごとのデータを管理するクラスに適している
- Spring MVCで使用可能
実装例
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;
@Component
@SessionScope
public class SessionScopedBean {
public SessionScopedBean() {
System.out.println("SessionScopedBean インスタンス作成!");
}
}
✅ セッションスコープは、ログイン情報やユーザーごとのデータ管理に適している!
7. アプリケーション(application
)
特徴
- アプリケーション全体で1つのインスタンスを共有
- シングルトンと似ているが、Webアプリ(Servletコンテキスト)向け
- アプリ全体の設定情報を管理するクラスに適している
実装例
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.ApplicationScope;
@Component
@ApplicationScope
public class ApplicationScopedBean {
public ApplicationScopedBean() {
System.out.println("ApplicationScopedBean インスタンス作成!");
}
}
✅ アプリケーションスコープは、アプリ全体で1つだけ管理すべきデータ(設定情報など)に適している!
まとめ
Springのスコープを正しく使うことで、Beanのライフサイクルを適切に管理できます。
スコープ | 用途 |
---|---|
singleton (デフォルト) | アプリ全体で1つのインスタンスを共有(状態を持たないクラス向け) |
prototype | 毎回新しいインスタンスを作成(ステートフルなクラス向け) |
request | HTTPリクエストごとに新しいインスタンスを作成(リクエストデータ管理向け) |
session | ユーザーセッションごとにインスタンスを作成(ログイン情報管理向け) |
application | アプリ全体で1つのインスタンスを共有(アプリの設定管理向け) |
スコープを適切に使い分けて、Springアプリをより効率的に設計しましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
新入社員2025年2月21日【新人エンジニア必見】よくあるGitエラーメッセージと対策方法10選
新入社員2025年2月21日Spring BootのThymeleaf(タイムリーフ)入門 – テンプレートエンジンの基礎を学ぼう!
新入社員2025年2月21日【完全ガイド】良いJavaDocの書き方とベストプラクティス
新入社員2025年2月21日Spring Bootのアノテーションはなぜインタフェースなのか?