Ответ
Spring предоставляет шесть стандартных областей видимости (scopes) для бинов. Их доступность зависит от контекста приложения.
Стандартные scopes:
singleton(по умолчанию) — контейнер создает единственный экземпляр бина, и все запросы возвращают этот же объект.prototype— контейнер возвращает новый экземпляр при каждом запросе бина (черезgetBean()или инъекцию).request— один экземпляр на жизненный цикл одного HTTP-запроса (только для веб-приложений).session— один экземпляр на HTTP-сессию пользователя (только для веб-приложений).application— один экземпляр на жизненный циклServletContext(только для веб-приложений).websocket— один экземпляр на жизненный цикл WebSocket-сессии.
Как задать scope:
@Component
@Scope("prototype") // или @Scope(value = WebApplicationContext.SCOPE_REQUEST)
public class MyPrototypeBean { ... }
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public MyService myService() {
return new MyService();
}
Важно: Scopes singleton и prototype доступны всегда. Остальные (request, session, application, websocket) — только в веб-приложениях. Для создания кастомного scope необходимо реализовать интерфейс org.springframework.beans.factory.config.Scope.