我需要用一些值来初始化每个新的 http session 。我怎么做?
我尝试在@PostConstruct 中创建一个 session 范围的组件并初始化 session ,但是在我请求访问它们之前,不会急切地创建 session 范围的 bean。
最佳答案
如果你绝对确定你想要预先初始化,你可以执行以下操作:
- 为所有bean定义一个拦截器
定义一个
<lookup-method>
对于那个拦截器:<lookup-method name="getCurrentSessionBean" bean="yourSessionBeanToInitialize"/>
定义拦截器
abstract
, 与abstract
方法getCurrentSessionBean()
- 创建一个标志
initialized
在 bean 上 - 在每次拦截时,调用 lookup 方法,它将返回当前 session 中的 bean 实例。如果没有初始化(flag),就初始化
- 你也可以使用
@PostConstruct
并保留initizlied
旗帜
另一种选择是:
- 定义一个
HttpSessionListener
在 web.xml 中(如果使用 servlet 3.0,则带有注释) - 使用
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
获取上下文 - 调用
getBean(..)
获取 session 范围 bean 的实例 - 它将被初始化为
@PostConstruct
那时
第一个选项是“更多 Spring ”,第二个选项更容易和更快地实现。
关于java - 如何在 Spring MVC 的 session 开始时做一些事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263067/