Какой scope у бина используется в Spring по умолчанию?

«Какой scope у бина используется в Spring по умолчанию?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

По умолчанию в Spring все бины имеют scope singleton.

Что это означает: Контейнер Spring IoC создает и возвращает один и тот же экземпляр бина при каждом запросе или внедрении зависимости.

Пример бина по умолчанию:

@Component // Или @Service, @Repository, @Controller
public class DefaultSingletonService {
    // Этот бин будет существовать в единственном экземпляре в контексте приложения
}

Другие доступные scopes в Spring:

  • prototype – новый экземпляр создается при каждом запросе бина.
  • request – экземпляр живет в рамках одного HTTP-запроса (только для веб-приложений).
  • session – экземпляр живет в рамках HTTP-сессии пользователя (только для веб-приложений).
  • application – экземпляр живет в рамках ServletContext (аналог singleton, но с семантикой веб-уровня).
  • websocket – экземпляр живет в рамках сессии WebSocket.

Как изменить scope: Используйте аннотацию @Scope.

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