Sobes.tech
Junior
119
questionbank

Какие области видимости (Scope) в Spring ты знаешь?

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

sobes.tech AI

Spring Framework определяет несколько областей видимости для бинов:

  1. Singleton: Один экземпляр бина создается на контейнер Spring. Это область видимости по умолчанию.
  2. Prototype: Новый экземпляр бина создается всякий раз, когда он запрашивается.
  3. Request: Для веб-приложений. Один экземпляр бина создается на HTTP-запрос.
  4. Session: Для веб-приложений. Один экземпляр бина создается на HTTP-сессию.
  5. Application: Для веб-приложений. Один экземпляр бина создается на весь контекст ServletContext.
  6. WebSocket: Для WebSocket-приложений. Один экземпляр бина создается на WebSocket-сессию.
  7. CustomScopes: Возможность определить собственные области видимости.

Вот пример объявления бина с различной областью видимости:

// Объявление Singleton (по умолчанию)
@Component
public class SingletonBean {
    // ...
}

// Объявление Prototype
@Component
@Scope("prototype")
public class PrototypeBean {
    // ...
}

// Объявление Request (для веб-приложений)
@Component
@Scope("request")
public class RequestBean {
    // ...
}

// Объявление Session (для веб-приложений)
@Component
@Scope("session")
public class SessionBean {
    // ...
}

Разница между Singleton и Prototype:

Свойство Singleton Prototype
Количество экземпляров Один на контейнер Новый при каждом запросе
Управление жизненным циклом Контейнером Spring Контейнером Spring до создания, далее - пользователь
Состояние Общее состояние для всех обращений Отдельное состояние для каждого экземпляра

Области видимости Request, Session, Application и WebSocket применимы только в контексте веб-приложений и управляются соответствующими обработчиками запросов или сессий.