Ответ
Да, scope application существует в Spring, но он специфичен для веб-приложений и не является одним из пяти стандартных scopes для обычных бинов.
Ключевые моменты:
- Контекст: Доступен только в веб-приложениях Spring (
WebApplicationContext). - Жизненный цикл: Бин создается один раз на все приложение и привязывается к
ServletContext. - Видимость: Доступен для всех HTTP-запросов и сессий в рамках одного веб-приложения, аналогично
singleton, но с привязкой кServletContext.
Основные scopes в Spring:
singleton(по умолчанию) — один бин на IoC-контейнер.prototype— новый бин при каждом запросе.request— один бин на HTTP-запрос (только для веба).session— один бин на HTTP-сессию (только для веба).globalSession— для портальных приложений.application— один бин наServletContext(только для веба).websocket— один бин на WebSocket-сессию.
Пример объявления:
@Component
@Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ApplicationScopedBean {
// ...
}
Или с использованием аннотации @ApplicationScope (начиная с Spring 4.3):
@Component
@ApplicationScope
public class ApplicationScopedBean {
// ...
}
Почему это важно: Используйте application scope для данных, общих для всего приложения (например, кэш конфигурации, общие ресурсы), которые должны переживать перезапуск контейнера бинов, но быть привязанными к жизненному циклу веб-приложения.