0
我有一个Spring会话范围的bean,它在Web上下文中设置。我有一个作为Callable运行的任务,并且我需要从该线程中访问此Bean。我应该如何做到这一点?如果我只是尝试自动装配bean的我得到错误信息:将会话范围的bean自动装入线程(Spring)
范围“会议”不是当前线程
会话作用域的bean我注射看起来像这样活跃:
<bean id="userInfo" class="com.company.web.UserInfoBean" scope="session">
<aop:scoped-proxy />
</bean>
,我试图给它注入到看起来像这样的类:
@Component
@Scope(value = "thread", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class GenerateExportThread implements Callable<String> {
...
// this class contains an @Autowired UserInfoBean
@Autowired
private ISubmissionDao submissionDao;
...
}
因为bean是会话范围
@Autowired
private GenerateExportThread generateExportThread;
@Autowired
private AsyncTaskExecutor taskExecutor;
public void myMethod() {
...
Future<String> future = taskExecutor.submit(new ThreadScopeCallable<String>(generateExportThread));
...
}
的ISubmissionDao实施得到正确注射,而不是它的UserInfoBean:210
最后,可调用正在启动这个样子。如果需要在线程启动时将对象从一个会话复制到另一个会话中(如果这有意义),但我只是不知道如何去做这件事,我可以做一些手动代码工作。任何提示都表示赞赏。谢谢!
我认为这是工作,但不完全是。从线程内调用submissionDao时,UserDocument对象仍然无法在submissionDao中访问。它给出错误消息:找不到线程绑定请求:您是否在实际Web请求之外引用请求属性,或者在原始接收线程之外处理请求? – Markus 2012-02-07 22:06:21
它看起来像手动设置线程外部的submissionDao中的UserInfoBean对象可以正常工作。我会接受这个答案,因为它给了我解决问题所需的一切。谢谢。 – Markus 2012-02-07 22:09:23