我想在我的程序中为不同的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() {
// ...
}
});
}
}
好吧,这显然是行不通的。
任何想法?