2012-03-03 107 views
1

范围内的对象在春天,我有很多的代码,使用这样定义会话bean:春季会议在@Scheduled

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

  • 在我的JUnit测试,所有也无妨,因为我使用的是 WebContextTestExecutionListenerlink),对于会话范围

  • 但注册一个线程 范围时@Scheduled的方法被调用时,我由于没有 会话范围,因此得到例外。

现在我的问题是:我如何注册在我的@Scheduled方法用于会话范围线程范围是什么?

我已经试过这样的事情:beanFactory.registerScope("session", new SimpleThreadScope());但也重写我的web应用:(的会话范围

+0

计划任务在任意线程上执行。它们与会话范围没有逻辑关系,所以尝试这样做是没有意义的。 – skaffman 2012-03-03 22:27:20

+0

我同意计划任务没有逻辑会话范围。因此,可以将计划上下文中会话作用域的含义从http-session-scope更改为另一种“会话”作用域,例如threadlocal或singleton。 – Cojones 2012-03-04 07:28:36

回答

0

原来,这个问题与spring 3 scheduled task running 3 times有很大关系,因为我的ContextLoaderListener和DispatcherServlet是指向相同的上下文配置,范围被覆盖 @ skaffman/Wesley:谢谢你的评论。

2

计划任务无关与sessionscope,会话可能甚至当时的计划任务结束如果你的计划任务需要会话中的数据,只需将包含数据的新对象传递给预定方法

+0

现有源对会话作用域对象有大约50多个引用。现在,我认为手动传入所有'会话'对象是不可接受的。 – Cojones 2012-03-04 07:24:13