如何在Spring MVC中启动会话?

时间:2010-07-16 08:17:28

标签: java spring servlets spring-mvc

我需要用一些值初始化每个新的http会话。我怎么做?

我尝试在@PostConstruct中创建一个会话范围的组件并初始化会话,但是在我请求访问它们之前,不会急切地创建会话范围的bean。

1 个答案:

答案 0 :(得分:3)

如果您完全确定需要急切初始化,则可以执行以下操作:

  • 为所有bean定义拦截器
  • 为该拦截器定义<lookup-method>

    <lookup-method name="getCurrentSessionBean"
         bean="yourSessionBeanToInitialize"/>
    
  • 使用abstract方法abstract

  • 定义拦截器getCurrentSessionBean()
  • 在bean上创建一个标记initialized
  • 在每次拦截时,调用lookup方法,它将从当前会话返回bean的一个实例。如果未初始化(标志),则初始化
  • 您还可以使用@PostConstruct并备用initizlied标志

另一种选择是:

  • 在web.xml中定义HttpSessionListener(如果使用servlet 3.0,则使用注释)
  • 使用WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)获取上下文
  • 调用getBean(..)以获取会话范围的bean的实例
  • 此时将使用@PostConstruct进行初始化

第一个选项是“更多弹簧”,第二个选项更容易实现。