Webコンテキスト内で設定されたSpring内にセッションスコープのBeanがあります。 Callableとして実行されるタスクがあり、そのスレッド内からこのBeanにアクセスする必要があります。私はこれをどのように達成すべきですか? 「セッション」は私はこのようなルックスを注入しています現在のスレッドセッションスコープのBeanをスレッドに自動バインドする(Spring)
セッションスコープのBeanのアクティブでない
範囲::私は単純にBeanをオートワイヤリングしようとすると、私はエラーメッセージが表示されます
<bean id="userInfo" class="com.company.web.UserInfoBean" scope="session"> <aop:scoped-proxy /> </bean>
そして、私はこのようなルックスに注入しようとしているクラス:
そのBeanがセッションスコープであるため、そのUserInfoBeanを@Component @Scope(value = "thread", proxyMode = ScopedProxyMode.TARGET_CLASS) public class GenerateExportThread implements Callable<String> { ... // this class contains an @Autowired UserInfoBean @Autowired private ISubmissionDao submissionDao; ... }
@Autowired private GenerateExportThread generateExportThread; @Autowired private AsyncTaskExecutor taskExecutor; public void myMethod() { ... Future<String> future = taskExecutor.submit(new ThreadScopeCallable<String>(generateExportThread)); ... }
ISubmissionDao実装が正しく注入されますが、ない:210
最後には、呼び出し可能は次のように起動されています。スレッド起動時にオブジェクトをあるセッションから別のセッションにコピーする必要がある場合は手動でコードを実行しても問題ありませんが、これを行う方法はわかりません。任意のヒントが評価されます。ありがとう!
あなたのスレッド・スコープのBean:あなたの要求のスレッドで
@Component @Scope(value = "thread", proxyMode = ScopedProxyMode.TARGET_CLASS) public class GenerateExportThread implements Callable<String> { ... // this class contains an @Autowired UserInfoBean private ISubmissionDao submissionDao; public void setSubmissionDao(ISubmissionDao submissionDao) { this.submissionDao = submissionDao; } ... }
:
を私はこれが働いていたと思ったが、それは非常にではありません。スレッド内からsubmissionDaoを呼び出すと、submissionDaoでUserInfoBeanオブジェクトにアクセスすることはできません。これは、エラーメッセージを表示します:スレッドバインドされた要求が見つかりません:実際のWeb要求以外の要求属性を参照していますか、元の受信スレッド外の要求を処理していますか? – Markus
submissionDaoのUserInfoBeanオブジェクトをスレッド外から手動で設定すると、すべて正常に動作します。私はこの問題を解決するために必要なものすべてをくれたので、私はこの答えを受け入れます。ありがとう。 – Markus