Java Spring MVC 3.0访问会话变量

Java Spring MVC 3.0访问会话变量,java,spring,servlets,spring-mvc,Java,Spring,Servlets,Spring Mvc,我有以下问题,我已经配置了应该存储在会话中的以下类 <bean id="Users" class="com.doolloop.DlUser" scope="session"> <aop:scoped-proxy/> </bean> 问题是我总是得到用户对象的空值 我做错了什么 第二个问题,我在文章中读到访问HttpSession不是线程安全的,如何以安全的方式实现?应该是单身吗?为什么这不是线程安全操作 先谢谢你 丹尼 范围为“会话”的对象不存储在会话中,它

我有以下问题,我已经配置了应该存储在会话中的以下类

<bean id="Users" class="com.doolloop.DlUser" scope="session">
<aop:scoped-proxy/>
</bean>
问题是我总是得到用户对象的空值

我做错了什么

第二个问题,我在文章中读到访问
HttpSession
不是线程安全的,如何以安全的方式实现?应该是单身吗?为什么这不是线程安全操作

先谢谢你


丹尼

范围为“会话”的对象不存储在会话中,它们通过常规的直接注入范式可用于会话。只是他们的课时打成平局。所以,如果您需要这个可用的,您需要将这个bean注入到您的控制器中。阅读了解更多信息。

当您想要将作用域较短的bean注入作用域较长的bean(即会话作用域bean注入单例作用域bean)时,这是一种特殊情况

您可以使用
查找方法

<bean id="yourSingletonBean"
    class="your.singleton.BeanClass">
    <lookup-method name="getDLUser" bean="Users"/>
</bean>

您需要使您的单例bean
抽象
,并创建一个
抽象
方法
公共DLUser getDLUser()

然而,这并不是一个完美的解决方案。我们的想法是尽可能少地举行会议。如果您不需要在会话中存储bean,而只需要存储当前用户,则可以在用户登录时轻松调用
session.setAttribute(..)
,然后使用
session.getAttribute(..)
访问当前用户,而用户根本不是bean


我在应用程序中为当前用户选择的一种方法是创建一个自定义的
@SessionAttribute
注释。请参阅如何实现这一点。

这是否意味着此bean将与Http会话存在的时间相同?是的,这是正确的,但请阅读Bozho的答案。如果您将这个bean注入到一个寿命更长的bean中,效果将与您预期的不同。您最好使用session.getAttribute()获取对象,或者使用AOP为会话对象执行代理-查看此处的示例以了解更多详细信息:。本质上,这个链接解释了如何为会话范围的bean创建一个代理,因此该代理是获取与会话中的内容匹配的对象的正确实例的代理
<bean id="yourSingletonBean"
    class="your.singleton.BeanClass">
    <lookup-method name="getDLUser" bean="Users"/>
</bean>