Java 将请求范围的bean注入线程池的解决方案是什么

Java 将请求范围的bean注入线程池的解决方案是什么,java,spring,spring-mvc,threadpoolexecutor,Java,Spring,Spring Mvc,Threadpoolexecutor,我有一个SpringMVC应用程序,它工作得很好。 我有一个bean X,它有以下声明 @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) 我需要创建一个后台cron作业。 我已经在我的新bean中添加了一个threadPool和@Scheduled注释,它使用的是依赖bean X 当Spring启动cron任务时,出现以下异常: org.springframework.beans.factory.BeanCr

我有一个SpringMVC应用程序,它工作得很好。 我有一个bean X,它有以下声明

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
我需要创建一个后台cron作业。 我已经在我的新bean中添加了一个threadPool和@Scheduled注释,它使用的是依赖bean X

当Spring启动cron任务时,出现以下异常:

org.springframework.beans.factory.BeanCreationException:创建名为“scopedTarget.X”的bean时出错:当前线程的作用域“request”未处于活动状态;如果您想从一个单体引用它,请考虑为这个bean定义一个作用域代理;嵌套异常为java.lang.IllegalStateException:未找到线程绑定请求:您是在实际web请求之外引用请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet/DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求

我知道我的BeanX将仅由DispatcherServlet注入


我的问题是如何纠正这种行为?

你没有
@Scheduled
将在与请求处理线程分离的线程上运行。它永远无法访问请求范围的bean,因为它与那些请求无关。有没有办法通过
beanpstoprocessor
hooks或类似的东西将我的X bean注入线程池使用的spring上下文?我试过了,但没有一个机会,您似乎不了解请求范围bean的生命周期。看,我明白了。Spring可以管理具有不同作用域的bean的依赖项解析。你知道一些关于作用域代理的知识吗?去读我的答案和其他的。它直接处理会话范围,但同样适用于请求范围。