我有一个spring mvc应用程序,它大量使用在a中定义的bean 请求范围。现在我必须在此范围之外使用此应用程序的一部分(在 qwertz在Magnolia CMS工作)。这当然不起作用:
创建名为'requestHelper'的bean时出错:范围'请求'是 对当前线程不活跃
我无法更改bean的范围,我无法更改代码。所以我唯一的可能性 似乎将当前线程的范围更改为请求范围模型。
我试过像
这样的东西XmlWebApplicationContext context = (XmlWebApplicationContext) ApplicationContextProvider.getApplicationContext() ;
MockServletContext mockServletContext = new MockServletContext("/");
context.setServletContext(mockServletContext);
context.refresh();
但是这仍然不会激活当前线程中的请求范围。我怎样才能实现 此?
答案 0 :(得分:1)
可以按如下方式激活请求范围:
RequestContextHolder.setRequestAttributes(
new ServletRequestAttributes(new MockHttpServletRequest()));
...
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.requestCompleted();
RequestContextHolder.resetRequestAttributes();
Thoguh我认为在生产代码中使用这样的黑客并不是一个好主意。