我想在我的程序中为不同的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() {
// ...
}
});
}
}
嗯,这显然不起作用。
有什么想法吗?