0Pricing
Spring Boot 4 Microservices & REST APIs · Урок

Области видимости бинов

Изучите области видимости singleton, prototype, request и session

«Области видимости бинов» — бесплатный урок Spring Boot 4 Microservices & REST APIs на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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 ObjectProvider for fresh prototypes inside singletons

Часто задаваемые вопросы

Урок «Области видимости бинов» бесплатный?

Да — полный текст урока «Области видимости бинов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Spring Boot 4 Microservices & REST APIs, подпишись на CoddyKit PRO. Курс Spring Boot 4 Microservices & REST APIs содержит 4 уроков всего.

Чему я научусь в уроке «Области видимости бинов»?

Изучите области видимости singleton, prototype, request и session Ты практикуешь Spring Boot 4 Microservices & REST APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Spring Boot 4 Microservices & REST APIs?

Предыдущий опыт не требуется. Spring Boot 4 Microservices & REST APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Области видимости бинов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Spring Boot 4 Microservices & REST APIs?

Да. Каждый урок Spring Boot 4 Microservices & REST APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Контейнер Spring IoC
  2. Внедрение через конструктор и поле
  3. Области видимости бинов
  4. Обратные вызовы жизненного цикла
← Назад к Spring Boot 4 Microservices & REST APIs