Что такое scope (область видимости) бина в Spring и для чего он нужен?

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

Ответ

Scope (область видимости) определяет жизненный цикл и контекст существования экземпляра бина в Spring IoC-контейнере.

Основные области видимости:

  • Singleton (по умолчанию): Создается один экземпляр на весь контекст приложения.
  • Prototype: Создается новый экземпляр при каждом запросе (через getBean() или инъекцию).
  • Request: Один экземпляр на жизненный цикл одного HTTP-запроса (только для веб-приложений).
  • Session: Один экземпляр на HTTP-сессию пользователя (только для веб-приложений).
  • Application: Один экземпляр на ServletContext (только для веб-приложений).

Зачем это нужно?

  • Управление состоянием: Prototype подходит для stateful-бинов, Singleton — для stateless.
  • Безопасность потоков: Request и Session изолируют данные между пользователями и запросами.
  • Оптимизация ресурсов: Singleton экономит память и время на создание, Prototype предотвращает нежелательное разделение состояния.

Пример объявления:

@Component
@Scope("prototype") // или @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class MyPrototypeService {
    // ...
}