如何在Spring MVC中启动会话?

art*_*emb 5 java spring servlets spring-mvc

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

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

Boz*_*zho 3

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

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

    <lookup-method name="getCurrentSessionBean"
         bean="yourSessionBeanToInitialize"/>
    
    Run Code Online (Sandbox Code Playgroud)
  • abstract使用abstract方法定义拦截器getCurrentSessionBean()

  • initialized在 bean 上创建一个标志
  • 在每次拦截时,调用查找方法,它将从当前会话返回 bean 的实例。如果未初始化(标志),则对其进行初始化
  • 您还可以使用@PostConstruct并保留该initizlied标志

另一种选择是:

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

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