Как сделать что-то на старте сессии в Spring MVC? - PullRequest
5 голосов
/ 16 июля 2010

Мне нужно инициализировать каждый новый сеанс http с некоторыми значениями.Как я могу это сделать?

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

1 Ответ

3 голосов
/ 16 июля 2010

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

  • определить перехватчик для всех бинов
  • defina a <lookup-method> дляэтот перехватчик:

    <lookup-method name="getCurrentSessionBean"
         bean="yourSessionBeanToInitialize"/>
    
  • определить перехватчик abstract, метод abstract getCurrentSessionBean()

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

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

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

Первый вариант - «больше пружины», второй проще и быстрее реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...