2

我有一个 spring mvc 应用程序,它大量使用在请求范围中定义的 bean。现在我必须在这个范围之外使用这个应用程序的一部分(在 Magnolia CMS 中的一个 qwertz 作业中)。这当然行不通:

创建名为“requestHelper”的 bean 时出错:范围“请求”对当前线程不活动

我无法更改 bean 的范围,也无法更改代码。所以我唯一的可能性似乎是将当前线程的范围更改为请求范围模型。

我尝试了类似的东西

XmlWebApplicationContext context = (XmlWebApplicationContext) ApplicationContextProvider.getApplicationContext() ;
   MockServletContext mockServletContext = new MockServletContext("/");
   context.setServletContext(mockServletContext);
   context.refresh();

但这仍然没有激活当前线程中的请求范围。我怎样才能做到这一点?

4

1 回答 1

2

可以按如下方式激活请求范围:

RequestContextHolder.setRequestAttributes(
    new ServletRequestAttributes(new MockHttpServletRequest()));     

...

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
    .requestCompleted();
RequestContextHolder.resetRequestAttributes(); 

Thoguh 我认为在生产代码中使用这样的 hack 并不是一个好主意。

于 2012-04-20T11:21:11.157 回答