【问题标题】:How do we get bean object from Spring session-scoped beans?我们如何从 Spring 会话范围的 bean 中获取 bean 对象?
【发布时间】:2014-08-26 22:48:48
【问题描述】:

我正在尝试从春季会话范围的 bean 中获取 bean。据我所知,基于会话范围实例化的 Bean 通过 HTTP 会话存在。那么如何从 Http Session 中获取这个 bean 对象。

【问题讨论】:

  • 只需像往常一样将其从容器中拉出,Spring 将确保每个会话都有一个共享实例。 .

标签: spring spring-mvc


【解决方案1】:

您不会从 Session 对象本身获取作用域 bean,您只需像获取任何其他 bean 一样从 Spring 上下文中获取它(例如,使用 BeanFactory#getBean)。 Spring 将负责上下文和会话之间的同步。

虽然 Spring 确实会将 bean 引用存储在 Session 对象中,但这是一个内部实现细节,您不应该自己在其中翻找。这可能会在不同的 Spring 版本之间发生变化,并且没有记录存储 bean 的会话属性键。

【讨论】:

  • 这是一个糟糕的答案,如果您有线程需要跨会话操作 bean 怎么办?
【解决方案2】:

您可以访问 ApplicationContext 并从那里检索 bean。

    ApplicationContext context = RequestContextUtils.getWebApplicationContext(request);
    SessionInfo info = context.getBean("SessionInfo");-->Whatever bean you want

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2012-10-31
    • 1970-01-01
    • 2011-02-23
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多