如何定义Locale范围?

时间:2011-03-27 07:01:19

标签: spring dependency-injection scoping

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

我可以从http请求中获取Locale首选项,然后我想在该特定语言环境中获取正确的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() {
                    // ...
                }

            });
    }

}

嗯,这显然不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

有关LocaleBeanScope实现的信息,请参阅related wiki page