При обсуждении областей действия bean-компонентов состояние документов Spring:
... использовать область действия прототипа для всех bean-компонентов с состоянием и единственную область действия для bean-объектов без состояния.
- Контроллеры с прототипом имеют состояние.
Да, локальные переменные контроллера (объявленные в методах) являются поточно-ориентированными, но переменные его экземпляра (переменные уровня класса) НЕ используются в bean-объектах синглтонной области.Если вы хотите сохранить состояние на уровне контроллера, используйте область действия прототипа.
Кроме того, все усложняется, когда у контроллера есть зависимости от bean-объектов в области действия прототипа.После того, как зависимость установлена, она НЕ будет сброшена после создания нового bean-объекта с прототипом, что в первую очередь отрицательно скажется на том, чтобы иметь эту зависимость bean-объекта с прототипом.
Вы не можетеЗависимость - внедрить bean-объект с прототипом в ваш синглтон-бин, потому что это внедрение происходит только один раз, когда контейнер Spring создает экземпляр синглтон-компонента и разрешает и внедряет его зависимости.Если вам нужен новый экземпляр компонента-прототипа во время выполнения более одного раза, см. Внедрение метода.
Возможно, вы захотите быть осторожным с внедрением метода, потому что это довольно продвинутая функция.Так еще одна причина, по которой кто-то может захотеть использовать контроллеры с прототипом?
Контроллеры с прототипом позволяют вам иметь истинные зависимости bean-объекта с прототипом без необходимости иметь дело с прокси-сервером CGLIB и внедрением метода.
Однако учтите, что производительность, которую ваше приложение может понизить, используяконтроллеры с прототипом.