このパターンがいくつかの異なる場所で使用されているのを見てきましたが、それが何のためにあるのか、なぜそれが必要なのか正確にはわかりません。質の高いプロジェクトで見たことがあるので、役に立つと思いますが、盲目的にフォローするのではなく、理解したいと思います。このパターンは、サーブレットフィルターとStruts2インターセプター(概念的にはフィルターと非常によく似ています)で特に見られます。
Google Guice(サーブレット)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ブロックの値を復元するための必要性または利点は何ですか?