Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Spring: Spring, Bean Scope, Singleton, Prototype, Application Context

Какие области видимости бинов существуют в Spring?

Вопрос проверяет знание областей видимости бинов в Spring, что необходимо для корректного управления жизненным циклом и состоянием объектов в контейнере.

Короткий ответ

В Spring существует несколько стандартных областей видимости (scope) для бинов, определяющих их жизненный цикл и количество экземпляров в контексте. Основные области: singleton (один бин на контейнер), prototype (новый экземпляр при каждом запросе), request (один бин на HTTP-запрос), session (один бин на HTTP-сессию), application (один бин на ServletContext) и websocket (один бин на WebSocket сессию). Выбор области зависит от того, нужно ли разделять состояние между компонентами.

Длинный ответ

В Spring Framework область видимости (scope) бина определяет, как контейнер создаёт и управляет экземплярами этого бина. Это ключевая концепция для контроля жизненного цикла и состояния объектов в приложении.

Стандартные области видимости

Spring предоставляет шесть встроенных областей, пять из которых доступны только в веб-приложениях:

  • singleton (по умолчанию): Контейнер создаёт ровно один экземпляр бина, и все запросы к этому бину возвращают один и тот же объект. Состояние является общим.
  • prototype: Каждый запрос бина (через getBean() или инъекцию зависимости) приводит к созданию нового экземпляра. Подходит для объектов с состоянием, которое не должно разделяться.
  • request: Создаётся один экземпляр на каждый HTTP-запрос. Область видимости существует только в контексте веб-приложения.
  • session: Один экземпляр на HTTP-сессию пользователя. Полезно для хранения пользовательских данных в течение сессии.
  • application: Один экземпляр на ServletContext. Похоже на singleton, но привязан к контексту сервлета, а не к Spring ApplicationContext.
  • websocket: Один экземпляр на жизненный цикл WebSocket. Используется в приложениях с веб-сокетами.

Как и где применяются

Область singleton используется по умолчанию для большинства сервисов, репозиториев и компонентов без состояния (stateless). Область prototype подходит для объектов, которые несут временное состояние, например, для обработки отдельного запроса или задачи, где каждый вызов должен быть изолирован. Веб-скопы (request, session) применяются в веб-слое для хранения данных, специфичных для запроса или пользователя.

Пример объявления области видимости

Область можно задать с помощью аннотации @Scope:

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("prototype") // Каждый раз новый экземпляр
public class ShoppingCart {
    private List<String> items = new ArrayList<>();
    public void addItem(String item) {
        items.add(item);
    }
}

@Component
@Scope("singleton") // Явное указание (по умолчанию)
public class ProductService {
    // Общий сервис без состояния
}

В XML-конфигурации область задаётся атрибутом scope элемента <bean>.

Вывод

Правильный выбор области видимости бина критически важен для управления памятью, состоянием и потокобезопасностью приложения. Используйте singleton для stateless компонентов, prototype для объектов с уникальным состоянием, а веб-скопы — для хранения данных, привязанных к HTTP-контексту.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Spring

    Spring

Ключевые слова

#Spring

#Bean Scope

#Singleton

#Prototype

#Application Context

Подпишись на Java Developer в телеграм