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