【问题标题】:Request and Session bean life cycles in SpringSpring中的请求和会话bean生命周期
【发布时间】:2017-06-29 19:53:52
【问题描述】:

在从处理请求的主线程创建的单独线程中异步使用具有请求或会话范围的 bean 是否安全?

我想知道如果请求完成或会话过期并且子线程仍然处于活动状态会发生什么。 spring 会破坏 bean 还是知道 bean 仍在使用中。

我只是在春季熟悉 bean 范围和生命周期。请原谅我的菜鸟。

【问题讨论】:

    标签: java spring multithreading spring-mvc session


    【解决方案1】:

    简短回答:不安全,请复制进行异步处理所需的信息。

    长答案:Spring 使用代理实现请求范围的 bean。这个代理就是注入你的类的东西。每当您在此代理上调用方法时,Spring 都会查找对当前请求有效的实际 bean(使用 ThreadLocal 机制),然后将调用委托给正确的实例。

    一旦请求线程完成,相关的请求范围 bean 就会被清除(以免干扰下一次将同一线程用于不同的请求)。它们没有被“销毁”,但由于您只有对它们的间接引用(通过注入的代理),它们实际上是不可访问的,并且会被垃圾收集。

    如果请求完成后您尝试调用代理上的方法之一并且不再有有效的请求,Spring 将抛出异常。

    【讨论】:

    • 感谢您的详尽解释!
    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多