のソース コードを見るとLocaleContextHolder
、変数があることがわかりThreadLocal
ます (実際には 2 つある) 。
private static final ThreadLocal<LocaleContext> localeContextHolder =
new NamedThreadLocal<LocaleContext>("Locale context");
a とは何かについて読むことができますが、ここThreadLocal
では、現在実行中のスレッドの ID をそのジェネリック型のオブジェクトにマップするデータ構造と考えてLocaleContext
ください。
サーブレット コンテナには、クライアント リクエストの処理に使用するスレッドのプールがあります。リクエストが来ると、これらのスレッドの 1 つが抽出され、サーブレットのservice()
メソッドが実行されます。Spring では、これによりDispatcherServlet
実行が行われ、@Controller
のハンドラ メソッドが呼び出されます。これはすべてThread
、サーブレット コンテナが選択したオリジナルで発生します。
したがって、@Service
クラスのメソッドが呼び出されたとき、あなたはまだ同じスレッドにいます。
ThreadLocal
inLocaleContextHolder
は、リクエスト処理のset()
早い段階で、 in FrameworkServlet
( の親タイプDispatcherServlet
) メソッドinitContextHolders()
によって呼び出されます。processRequest()
各 in doGet()
、doPost()
などのメソッド。は、そのメソッドを使用してLocale
から構築されます。HttpServletRequest
getLocale()