@Scheduled中的Spring会话作用域对象

时间:2012-03-03 21:11:45

标签: java spring session scope autowired

在Spring中,我有很多使用如下定义的会话bean的代码:

@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
  • 在我的webapplication中,一切都很好,因为会话范围是 可用。

  • 在我的JUnit测试中,一切都很好,因为我正在使用 注册线程的WebContextTestExecutionListenerlink) 会议范围的范围

  • 但是当调用@Scheduled的方法时,我得到一个例外,因为没有 会议范围。

现在我的问题是:如何在我的@Scheduled方法中为会话范围注册线程范围?

我尝试过这样的事情:beanFactory.registerScope("session", new SimpleThreadScope());但是这也覆盖了我的webapplication的会话范围:(

2 个答案:

答案 0 :(得分:2)

计划任务与sessionscope无关,甚至可以在计划任务执行时终止会话。如果计划任务需要会话中的数据,则只需将包含数据的新对象传递给计划方法。

答案 1 :(得分:0)

事实证明,这个问题与spring 3 scheduled task running 3 times非常相关。由于我的ContextLoaderListener和DispatcherServlet指向相同的上下文配置,因此范围被覆盖。 @ skaffman / Wesley:感谢您的评论。