0Pricing
Spring Boot 4 Microservices & REST APIs · Pelajaran

Cakupan Bean

Cakupan singleton, prototype, request, dan session.

Cakupan Bean adalah pelajaran Spring Boot 4 Microservices & REST APIs gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Spring Boot 4 Microservices & REST APIs, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Spring Boot 4 Microservices & REST APIs mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

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 ObjectProvider for fresh prototypes inside singletons

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Cakupan Bean” gratis?

Ya — teks lengkap “Cakupan Bean” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Spring Boot 4 Microservices & REST APIs, upgrade ke CoddyKit PRO. Kursus Spring Boot 4 Microservices & REST APIs mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Cakupan Bean”?

Cakupan singleton, prototype, request, dan session. Kamu berlatih Spring Boot 4 Microservices & REST APIs dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Spring Boot 4 Microservices & REST APIs?

Tidak diperlukan pengalaman sebelumnya. Spring Boot 4 Microservices & REST APIs di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Cakupan Bean” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Spring Boot 4 Microservices & REST APIs ini?

Ya. Setiap pelajaran Spring Boot 4 Microservices & REST APIs menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kontainer IoC Spring
  2. Injeksi Konstruktor vs Injeksi Field
  3. Cakupan Bean
  4. Callback Siklus Hidup
← Kembali ke Spring Boot 4 Microservices & REST APIs