我现在已经在几个不同的地方看到了这种模式,但我不确定它的确切用途或为什么需要它。鉴于我在优质项目中见过它,我相信它很有用,但我想了解它而不是盲目地遵循它。我在 Servlet 过滤器和 Struts2 拦截器中特别看到了这种模式(在概念上与过滤器非常相似)。
这是来自 Google Guice (Servlet) 3.0 的示例:
Context previous = localContext.get();
try {
localContext.set(new Context((HttpServletRequest) servletRequest,
(HttpServletResponse) servletResponse));
//dispatch across the servlet pipeline, ensuring web.xml's filterchain is honored
filterPipeline.dispatch(servletRequest, servletResponse, filterChain);
} finally {
localContext.set(previous);
}
恢复 finally 块中的值有什么需要或好处?