Назад к вопросам
Junior
168
questionbank

Какие области видимости бинов в Spring вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Spring Framework существуют следующие области видимости (scopes) бинов:

  • singleton: Один экземпляр бина создается для каждого контекста Spring. Является областью видимости по умолчанию. Ленивая инициализация может быть включена.
  • prototype: Новый экземпляр бина создается при каждом запросе к нему.
  • request: Новый экземпляр бина создается для каждого HTTP-запроса. Действителен только в контексте веб-приложения.
  • session: Новый экземпляр бина создается для каждой HTTP-сессии. Действителен только в контексте веб-приложения.
  • application: Один экземпляр бина создается для всего контекста веб-приложения (ServletContext). Действителен только в контексте веб-приложения.
  • websocket: (Начиная со Spring 4.0) Новый экземпляр бина создается для каждого жизненного цикла WebSocket-сессии.

Наиболее часто используемые области видимости:

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

Пример определения бина с определенной областью видимости:

// Пример определения бина с областью видимости prototype
@Component
@Scope("prototype")
public class MyPrototypeBean {

    // ... поля и методы ...
}