Вопрос проверяет знание областей видимости бинов в Spring, что необходимо для корректного управления жизненным циклом и состоянием объектов в контейнере.
В Spring Framework область видимости (scope) бина определяет, как контейнер создаёт и управляет экземплярами этого бина. Это ключевая концепция для контроля жизненного цикла и состояния объектов в приложении.
Spring предоставляет шесть встроенных областей, пять из которых доступны только в веб-приложениях:
getBean() или инъекцию зависимости) приводит к созданию нового экземпляра. Подходит для объектов с состоянием, которое не должно разделяться.ServletContext. Похоже на singleton, но привязан к контексту сервлета, а не к Spring ApplicationContext.Область singleton используется по умолчанию для большинства сервисов, репозиториев и компонентов без состояния (stateless). Область prototype подходит для объектов, которые несут временное состояние, например, для обработки отдельного запроса или задачи, где каждый вызов должен быть изолирован. Веб-скопы (request, session) применяются в веб-слое для хранения данных, специфичных для запроса или пользователя.
Область можно задать с помощью аннотации @Scope:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype") // Каждый раз новый экземпляр
public class ShoppingCart {
private List<String> items = new ArrayList<>();
public void addItem(String item) {
items.add(item);
}
}
@Component
@Scope("singleton") // Явное указание (по умолчанию)
public class ProductService {
// Общий сервис без состояния
}В XML-конфигурации область задаётся атрибутом scope элемента <bean>.
Правильный выбор области видимости бина критически важен для управления памятью, состоянием и потокобезопасностью приложения. Используйте singleton для stateless компонентов, prototype для объектов с уникальным состоянием, а веб-скопы — для хранения данных, привязанных к HTTP-контексту.