0

我想在我的程序中为不同的Locales创建不同的Bean实例,但是我对Spring CDI中的作用域机制了解不多。如果同时使用同一个 bean 的两个请求范围的实例,范围代理如何确定要转发的代理目标?

我可以从 http 请求中获取区域设置首选项,然后我想在该特定区域设置中获取正确的 bean。而不是使用“原型”范围,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 回答