Java Spring中的请求和会话bean生命周期

Java Spring中的请求和会话bean生命周期,java,spring,multithreading,spring-mvc,session,Java,Spring,Multithreading,Spring Mvc,Session,在从处理请求的主线程创建的独立线程中异步使用具有请求或会话作用域的bean是否安全 我想知道如果一个请求完成或者会话过期,并且子线程仍然处于活动状态,会发生什么。spring是否会破坏bean,或者是否知道bean仍在使用中 我只是在熟悉春天的豆范围和生命周期。请原谅我的无知。简短回答:这是不安全的,请复制进行异步处理所需的信息 详细回答:Spring使用代理实现请求范围的bean。这个代理就是注入到类中的代理。无论何时调用此代理上的方法,Spring都会查找对当前请求有效的实际bean(使用T

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

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


我只是在熟悉春天的豆范围和生命周期。请原谅我的无知。

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

详细回答:Spring使用代理实现请求范围的bean。这个代理就是注入到类中的代理。无论何时调用此代理上的方法,Spring都会查找对当前请求有效的实际bean(使用
ThreadLocal
机制),然后将调用委托给正确的实例

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


如果在请求完成后,您尝试调用代理上的其中一个方法,但没有有效的请求,Spring将抛出一个异常。

感谢您的详细解释!