У меня есть Spring-объект bean-объекта, установленный в веб-контексте. У меня есть задача, которая запускается как Callable, и мне нужен доступ к этому бину из этого потока. Как мне это сделать? Если я просто пытаюсь выполнить автоматическую раздачу компонента, я получаю сообщение об ошибке:
Область 'сессия' не активна для текущего потока
Сессионный компонент, который я внедряю, выглядит следующим образом:
<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;
...
}
Наконец, Callable запускается так:
@Autowired
private GenerateExportThread generateExportThread;
@Autowired
private AsyncTaskExecutor taskExecutor;
public void myMethod() {
...
Future<String> future = taskExecutor.submit( new ThreadScopeCallable<String>( generateExportThread ) );
...
}
Реализация ISubmissionDao корректно внедряется, но не в UserInfoBean, потому что этот бин имеет сессионную область. Я в порядке, если нужно выполнить некоторую ручную работу с кодом, если необходимо скопировать объект из одного сеанса в другой во время запуска потока (если это имеет смысл), но я просто не знаю, как это сделать. Любые советы приветствуются. Спасибо!