【问题标题】:How to set the attribute name of a Spring session scoped bean?如何设置 Spring 会话范围 bean 的属性名称?
【发布时间】:2012-05-21 13:40:08
【问题描述】:

给定一个配置了会话范围的spring bean,例如:

@Component
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value=WebApplicationContext.SCOPE_SESSION)
public class SomeBean {
}

有什么方法可以控制 Spring 将 bean 存储在 http 会话中的名称吗?

默认情况下弹簧接缝使用会话密钥scopedTarget.someBean 有什么我可以添加到注释中以显式指定会话中的属性名称吗?

【问题讨论】:

  • 必须重新实现 Spring 提供的 SessionScope。会话范围的 bean 旨在供 Spring 使用,它们并不意味着将内容存储在会话中,并且您可以在页面(或其他任何内容)中获取它们以显示信息。

标签: spring spring-mvc spring-webflow


【解决方案1】:

我会使用:

@Component (value="mySpecialName")
@Scope (value="session")

【讨论】:

  • 不起作用,组件以“mySpecialName”的 id 结束,但在会话中存储 bean 的属性仍然是 scopedTarget.mySpecialName 我真的想控制已安装的会话范围的 http 会话存储在
  • 我已将答案更改为包含@Scope。在我的代码中,我不需要设置 proxyMode。
【解决方案2】:

你不能。 scopedTarget 部分在 Spring 的作用域代理创建中被硬编码。因此,如果不重写根本不可能的框架部分。

名称在ScopedProxyBeanDefinitionDecorator 中硬编码,它代表ScopedProxyUtils

您使用范围代理的事实是框架内部的事情。您可能希望使用它在会话中存储某些内容并在页面或类似内容中检索它。不要,只需公开将委托给适当范围实例的常规 bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 2011-02-06
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2011-09-02
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多