Ответ
По умолчанию в Spring MVC создается один экземпляр (singleton) контроллера на все HTTP-запросы. Это обеспечивает высокую производительность, так как отсутствуют накладные расходы на создание объектов.
Почему singleton? Контроллеры обычно не хранят состояние запроса (stateless), поэтому их можно безопасно использовать повторно. Состояние запроса передается через параметры методов.
Как изменить поведение? Используя аннотацию @Scope("prototype"), можно заставить Spring создавать новый экземпляр для каждого запроса. Это нужно редко, например, если контроллер хранит состояние.
Пример:
// Стандартный singleton-контроллер
@Controller
public class DefaultController {
// Один экземпляр для всего приложения
}
// Prototype-контроллер (новый экземпляр на запрос)
@Controller
@Scope("prototype")
public class PrototypeController {
// Новый экземпляр для каждого HTTP-запроса
}
Важно: Для работы с состоянием в singleton-контроллерах используйте локальные переменные или параметры методов, а не поля класса.