0

プログラム内のさまざまなロケールに対してさまざまな 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() {
                    // ...
                }

            });
    }

}

まあ、それは明らかにうまくいきません。

何か案が?

4

1 に答える 1

0

LocaleBeanScope の実装については、関連する wiki ページを参照してください

于 2011-10-15T07:52:01.903 に答える