gpt4 book ai didi

java - 将 session 范围的 bean Autowiring 到线程中(Spring)

转载 作者:行者123 更新时间:2023-11-29 03:50:06 24 4
gpt4 key购买 nike

我在 Spring 中有一个 session 范围的 bean,它是在 Web 上下文中设置的。我有一个作为 Callable 运行的任务,我需要从那个线程中访问这个 bean。我应该如何做到这一点?如果我只是尝试 Autowiring bean,我会收到错误消息:

Scope 'session' is not active for the current thread

我正在注入(inject)的 session 范围的 bean 如下所示:

<bean id="userInfo" class="com.company.web.UserInfoBean" scope="session">
<aop:scoped-proxy />
</bean>

我尝试将其注入(inject)的类如下所示:

@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 实现被正确注入(inject),但不是它的 UserInfoBean,因为该 bean 是 session 范围的。如果需要在线程启动时将对象从一个 session 复制到另一个 session (如果这有意义的话),我可以做一些手动代码工作,但我只是不知道如何去做。任何提示表示赞赏。谢谢!

最佳答案

进行手动注入(inject):

您的线程作用域 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;
}
...
}

在您的请求线程中:

...
@Autowired // This should work as a request has an implicit session
private ISubmissionDao submissionDao;

@Autowired // This should also work: the request thread should have a thread-scoped exportThread
private GenerateExportThread generateExportThread;

...
generateExportThread.setSubmissionDao(submissionDao);
String result = generateExportThread.call(); // Or whatever you use to run this thread

关于java - 将 session 范围的 bean Autowiring 到线程中(Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9184068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com