Beanスコープ
Singleton、prototype、request、sessionスコープを学びます
「Beanスコープ」はCoddyKit上の無料Spring Boot 4 Microservices & REST APIsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSpring Boot 4 Microservices & REST APIs学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Spring Boot 4 Microservices & REST APIsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
What a Scope Controls
A bean’s scope determines how many instances the container creates and how long each lives. The default and most common scope is singleton.
Choosing the right scope matters for state, memory, and thread safety.
Singleton Scope
With singleton scope, the container creates exactly one instance per ApplicationContext and returns it for every injection point. This is ideal for stateless services.
@Service // singleton by default
public class PricingService {
public BigDecimal price(Order o) { /* stateless */ }
}Singletons Must Be Thread-Safe
Because one singleton serves all concurrent requests, it must not hold mutable per-request state in fields. Keep singletons stateless, or guard shared state carefully.
- Good: read-only config, injected collaborators
- Bad: a mutable field updated per request
Prototype Scope
Prototype scope creates a new instance every time the bean is requested or injected. Use it for stateful, short-lived helpers that should not be shared.
@Component
@Scope("prototype")
public class ReportBuilder {
private final List<String> rows = new ArrayList<>();
public void addRow(String r) { rows.add(r); }
}The Prototype-in-Singleton Trap
If you inject a prototype into a singleton via the constructor, you get one instance, captured once — not a fresh one per use. The singleton is built only once, so the prototype is resolved only once.
Getting Fresh Prototypes
To obtain a new prototype each time inside a singleton, inject an ObjectProvider (or a lookup) and call it on demand.
@Service
public class ReportService {
private final ObjectProvider<ReportBuilder> builders;
public ReportService(ObjectProvider<ReportBuilder> builders) {
this.builders = builders;
}
public Report build() {
ReportBuilder rb = builders.getObject(); // fresh each call
return rb.toReport();
}
}Web Scopes Overview
In a web application, two extra scopes tie a bean’s lifetime to an HTTP interaction: request and session. They exist only while a request or session is active.
Request Scope
A request-scoped bean is created once per HTTP request and discarded when it completes. Useful for per-request context like a correlation id or accumulated request data.
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestContext {
private String correlationId;
// getters/setters
}Session Scope
A session-scoped bean lives for the duration of a user’s HTTP session, holding per-user state across multiple requests, such as a shopping cart in a server-rendered app.
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserCart {
private final List<Item> items = new ArrayList<>();
}Why Scoped Proxies
Injecting a short-lived scoped bean into a long-lived singleton needs a proxy. The proxy is injected once but delegates each call to the correct current-request or current-session instance.
That is why request/session beans use proxyMode = TARGET_CLASS.
Choosing a Scope
Guidelines:
- singleton — default; stateless shared services
- prototype — stateful, per-use helpers
- request — per-HTTP-request context
- session — per-user state across requests
Quick Check
Test your understanding of scopes.
Recap
Scope controls instance count and lifetime.
- singleton (default) — one per context, keep stateless
- prototype — new instance per request; beware the singleton trap
- request/session — web scopes needing scoped proxies
- Use
ObjectProviderfor fresh prototypes inside singletons
よくある質問
「Beanスコープ」レッスンは無料ですか?
はい。「Beanスコープ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Spring Boot 4 Microservices & REST APIsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Spring Boot 4 Microservices & REST APIsコースには全4レッスンが含まれています。
「Beanスコープ」で何を学びますか?
Singleton、prototype、request、sessionスコープを学びます ブラウザで直接実行するハンズオンコードでSpring Boot 4 Microservices & REST APIsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Spring Boot 4 Microservices & REST APIsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSpring Boot 4 Microservices & REST APIsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Beanスコープ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSpring Boot 4 Microservices & REST APIsレッスンでコードを書いて実行できますか?
はい。すべてのSpring Boot 4 Microservices & REST APIsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。