【问题标题】:Using a Session Scoped Bean使用会话范围的 Bean
【发布时间】:2010-06-08 20:40:10
【问题描述】:

以下代码返回 null:

AController.java

    private MyAppUser getMyAppUser(HttpSession session) {
        MyAppUser myAppUser = (MyAppUser) session.getAttribute("myAppUserManager");
        return myAppUser;
    }

我也试过这个:

AController.java

@Autowired
MyAppUser myAppUser;

尽管我的上下文中有以下内容:

<bean id="myAppUserManager" class="com.myapp.profile.MyAppUser" scope="session"/>

这对我来说没有任何意义,“myAppUser”bean 是一个绝对不能为空的 bean,我需要能够从控制器中引用它,我不需要在服务或存储库中使用它,只是控制器,但它似乎没有被存储在会话中,用例非常简单,但我无法深入了解问题所在,或者想出一个好的解决方法

【问题讨论】:

    标签: java spring-mvc


    【解决方案1】:

    会话范围的 bean 在这样的会话中不可用。 Spring 管理它们,并将它们存储在会话中,但不是以您可以手动将它们捞出的方式。

    如果您想使用作用域 bean,请将其连接到您的其他 bean 中,就像任何其他 bean 一样。不过,有些事情需要注意 - 请参阅 here。本质上,如果您想将会话范围的 bean A 连接到 bean B,那么 bean B 也必须是会话范围的(或请求范围的),除非您使用范围代理 - 请参阅上一个链接有关如何执行此操作的信息。

    【讨论】:

    • 我链接的代码位于带注释的控制器中,因此我无法像您引用的文档那样链接配置中的属性。事实上,我已经看过那个文档了。我在每个控制器中也需要这个对象,所以我不会将它全部转换为基于 XML 的。我还尝试自动装配“myAppUser”,但由于部署异常而失败,控制器不是会话或请求范围吗?我觉得这很难相信。
    • @jboyd:控制器默认是单例范围的,就像任何其他 bean 一样。此外,您不需要将控制器放入 XML - 只需在 XML 中定义作用域 bean,并在其中定义 &lt;aop:scoped-proxy/&gt;
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 2015-01-27
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2014-04-22
    • 2012-12-26
    相关资源
    最近更新 更多