我遇到了在异步方法中访问会话范围bean的问题。
My Bean定义:
<bean name="ABC" class="java.util.HashMap" scope="session">
<aop:scoped-proxy />
</bean>
我的控制器类有注释&#39; @ EnableAsync&#39;。 我在控制器中使用异步方法自动装配类:
@Autowired
AsyncWorker asyncWorker;
当调用异步方法时,它会尝试通过以下代码行获取上面定义的会话bean:
Map<String, Object> sessionMap = context.getBean("ABC");
最终会出现以下错误
org.springframework.beans.factory.BeanCreationException:创建名称为&#39; scopedTarget.ABC&#39;:Scope&#39; session&#39;当前线程不活动;考虑为这个bean定义一个范围代理,如果你想从一个单例引用它;嵌套异常是java.lang.IllegalStateException:找不到线程绑定请求:您是指在实际Web请求之外的请求属性,还是在最初接收线程之外处理请求?如果您实际在Web请求中操作并仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter来公开当前请求。
RequestContextListener也在我的web.xml中定义。
当呼叫同步时,一切正常。 启动新线程或使用Async方法会导致相同的错误。 任何有关这方面的帮助将不胜感激。