Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Какие скопы бинов существуют в Spring?

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

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

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

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

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

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

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

  • singleton: Это область видимости по умолчанию. Контейнер создаёт ровно один экземпляр бина, и все запросы к этому бину возвращают один и тот же объект. Этот экземпляр хранится в кэше синглтонов. Используется для stateless-сервисов, таких как сервисы бизнес-логики или репозитории.
  • prototype: Контейнер создаёт новый экземпляр бина каждый раз, когда он запрашивается через метод getBean() или когда он внедряется в другой бин. Используется для stateful-бинов, состояние которых должно быть уникальным для каждого использования, например, для объектов, представляющих данные формы.

Области видимости для веб-приложений

Следующие четыре области видимости доступны только в веб-ориентированном контексте приложения (например, WebApplicationContext):

  • request: Создаётся один экземпляр бина на жизненный цикл одного HTTP-запроса. После завершения запроса бин уничтожается. Идеально подходит для хранения данных, специфичных для запроса.
  • session: Создаётся один экземпляр бина на HTTP-сессию пользователя. Бин живёт, пока активна сессия, и уничтожается при её завершении. Подходит для хранения пользовательских данных сессии, например, корзины покупок.
  • application: Создаётся один экземпляр бина на жизненный цикл ServletContext. Это похоже на синглтон, но с важным отличием: синглтон привязан к контексту Spring, а application scope — к ServletContext. Используется для хранения данных, общих для всего веб-приложения.
  • websocket: Создаётся один экземпляр бина на жизненный цикл WebSocket-сессии. Актуален для приложений с двусторонней коммуникацией в реальном времени.

Пример объявления scope

Область видимости можно задать с помощью аннотации @Scope или в XML-конфигурации.

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

@Component
@Scope("prototype") // Будет создаваться новый экземпляр при каждом внедрении
public class PrototypeService {
    // ...
}

@Component
@RequestScope // Бин будет жить в рамках одного HTTP-запроса
public class RequestScopedBean {
    private String requestData;
    // ...
}

Выбор правильной области видимости напрямую влияет на корректность работы приложения, потребление памяти и потокобезопасность. Синглтон следует использовать для stateless-компонентов, в то время как request или session scope необходимы для хранения пользовательских данных. Prototype полезен, когда состояние объекта не должно разделяться между разными клиентами операции.

Итог: Знание и правильное применение scope бинов в Spring позволяет эффективно управлять жизненным циклом объектов, избегая утечек памяти и конфликтов данных, особенно в многопользовательских веб-приложениях.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Spring

    Spring

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

#Spring

#Bean Scope

#Singleton

#Prototype

#Application Context

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