プログラム内のさまざまなロケールに対してさまざまな Bean インスタンスを作成したいのですが、Spring CDI のスコープ メカニズムについてあまり知りません。同じ Bean の 2 つのリクエストスコープのインスタンスが同時に使用されている場合、スコーププロキシはどのプロキシターゲットを転送するかをどのように決定しますか?
http リクエストから Locale プリファレンスを取得できます。次に、その特定のロケールで正しい Bean を取得したいと考えています。"prototype" スコープを使用するのではなく、Locale-scope は、使用されているロケールのインスタンスのみをいくつか作成します。個人的には、私は自分のやり方でこのようなものを望んでいます:
@Component
@Scope("locale")
class MyService {
@Inject
@Named("scope-invariant")
public MyService(Locale locale) {
ResourceBundle nls = getResourceBundle(..., locale);
// ...
}
}
@Controller
class MyController {
void service(HttpServletRequest req, HttpServletResponse resp) {
UserPreference userPreference = getUserPreference(req, res.getSession(), ...);
Locale userLocale = userPreference.getUserLocale();
applicationContext.doInScope(
new ScopeBinding("locale", userLocale),
new ScopedCallback() {
@Inject
MyService service;
void execute() {
// ...
}
});
}
}
まあ、それは明らかにうまくいきません。
何か案が?