Насколько я понимаю, пружинные контроллеры не имеют состояния, верно? Если я установлю в поле значение, оно будет отменено при следующем вызове.
Я считаю, что это неправильно: пружинные контроллеры могут быть с состоянием . Вы должны быть очень осторожны, потому что ожидается, что контроллер будет входящим и потокобезопасным и будет поддерживать несколько потоков, одновременно выполняющих несколько запросов.
Вероятно, можно с уверенностью сказать, что наилучшая практика для контроллера, который должен быть спроектирован так, чтобы эффективно не сохранять состояния; т.е. нет состояния, которое изменяется, пока контроллер находится в рабочем состоянии.
Есть ли возможность добавить init-метод или что-то?
Не совсем понятно, что вы имеете в виду. Однако:
- Контроллер
handleRequest
вызывается для запуска запроса.
- Если вы объявите какой-либо bean-компонент (например, bean-компонент контроллера) как
ApplicationContextAware
, он будет вызван обратно для информирования его о ApplicationContext.
- Если вы объявите какой-либо bean-компонент как
ServletContextAware
, он будет перезван, чтобы сообщить ему о ServletContext.
- Если вы объявите какой-либо bean-компонент как
InitializingBean
, он будет отозван, когда будут установлены все свойства.
И, несомненно, есть другие обратные вызовы и перехватчики, которые вы можете использовать для запуска некоторой отложенной инициализации / установки контекста.
(Я не уверен, как эти обратные вызовы / ловушки отображаются на аннотации ... но я уверен, что они делают.)