Ответ
Аннотация @Scope определяет область видимости (scope) бина в Spring, то есть его жизненный цикл и правила создания экземпляров.
Основные значения scope:
singleton(по умолчанию): Создается один экземпляр на весь контекст приложения. Все запросы к этому бину получают один и тот же объект.prototype: При каждом запросе (инъекции или вызовеgetBean()) создается новый экземпляр.request: Создается один экземпляр на один HTTP-запрос (только для веб-приложений).session: Создается один экземпляр на HTTP-сессию пользователя (только для веб-приложений).application: Создается один экземпляр на жизненный циклServletContext(только для веб-приложений).
Пример использования:
@Component
@Scope("prototype") // или @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class ShoppingCart {
// Для каждого нового покупателя будет создан новый экземпляр корзины
}
Важное замечание: Для scope, отличных от singleton (например, prototype), Spring не управляет полным жизненным циклом бина. Контейнер создает, настраивает и собирает бин, но не вызывает метод @PreDestroy. Управление ресурсами и очисткой для таких бинов ложится на клиентский код.