Как сделать, что-то на сессии запускает в Spring MVC?

Я должен инициализировать каждый новый сеанс HTTP с некоторыми значениями. Как я делаю это?

Я пытался создать ограниченный по объему сессией компонент и сессию инициализации в @PostConstruct, но ограниченные по объему сессией бобы нетерпеливо не создаются, пока я не запрашиваю доступ их.

5
задан skaffman 16 July 2010 в 08:37
поделиться

1 ответ

Если вы абсолютно уверены, что вам нужна ускоренная инициализация, вы можете сделать следующее:

  • определить перехватчик для всех бобов
  • определить для этого перехватчика:

    
    
  • определите перехватчик abstract, с abstract методом getCurrentSessionBean()

  • создайте флаг initialized на bean
  • при каждом перехвате вызывайте метод lookup, и он вернет экземпляр bean из текущей сессии. Если он не инициализирован (флаг), инициализируйте его
  • вы также можете использовать @PostConstruct и избавить initizlied от флага

Другой вариант:

  • определить HttpSessionListener в web. xml (или с аннотациями, если используется сервлет 3.0)
  • использовать WebApplicationContextUtils. getRequiredWebApplicationContext(servletContext) для получения контекста
  • вызовите getBean(...) для получения экземпляра боба с сеансовым копированием
  • он будет инициализирован с помощью @PostConstruct в этот момент

Первый вариант "более весенний", второй проще и быстрее в реализации.

3
ответ дан 15 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: