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

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

Ответ

Ответ идентичен вопросу с ID 8955, так как оба вопроса заданы одинаково.

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

Что это означает:

  • Контейнер Spring IoC создаёт ровно один экземпляр этого бина.
  • Все запросы и инъекции этого бина получают один и тот же общий объект.

Пример и особенности:

@Component // Или @Service, @Repository, @Bean в конфигурации
public class DefaultService {
    // Этот бин будет singleton
}

Важные аспекты singleton scope:

  1. Время жизни: Создаётся при инициализации контекста (если не @Lazy) и живёт до его уничтожения.
  2. Потокобезопасность: Не является потокобезопасным по умолчанию. Разработчик должен самостоятельно обеспечить синхронизацию, если бин используется в многопоточной среде (например, в веб-приложении).
  3. Производительность: Самый эффективный scope с точки зрения памяти и производительности.

Для использования других областей видимости (например, prototype, request, session) аннотацию @Scope необходимо указывать явно.