在处理请求的主线程创建的单独线程中异步使用带有请求或会话作用域的bean是否安全?
我想知道,如果请求完成或会话到期,而子线程仍然处于活动状态,会发生什么情况。春天会毁掉这个bean,或者它是否知道这个bean还在使用中。
我只是在熟悉春天的豆子范围和生命周期。请原谅我的下流。
发布于 2017-02-11 14:52:23
简单回答:这是不安全的,复制您需要做异步处理的信息。
长答案: Spring使用代理实现请求作用域bean。这个代理将被注入到类中。每当您在此代理上调用方法时,Spring将查找对当前请求有效的实际bean (使用ThreadLocal机制),然后将调用委托给正确的实例。
但是,一旦请求线程完成,关联的请求作用域bean就会被清除(以免干扰下一次同一个线程用于不同请求时)。它们没有被“销毁”,但是由于您只能间接引用它们(通过注入的代理),它们实际上是不可访问的,并且会被垃圾收集。
如果在请求完成后,您尝试调用代理上的一个方法,并且不再存在有效的请求,Spring将抛出一个异常。
https://stackoverflow.com/questions/42176789
复制相似问题