我经常需要客户端包和演示者和视图中的一些 i18n-ed 消息。
我想知道获得它们的最佳方法是:注入还是单例?
解决方案 1:到目前为止,我曾经使用 Singleton 获取消息:
public interface MyMessages extends Messages{
String key1();
String key2();
...
class Instance {
private static MyMessages instance = null;
public static MyMessages getInstance() {
if (instance == null) {
instance = GWT.create(MyMessages.class);
}
return instance;
}
}
}
FooView.java:
MyMessages.Instance.getInstance().key1();
解决方案2:像这样注射会更好吗?
private MyMessages i18n;
@Inject
public FooView(MyMessages i18n){
this.i18n=i18n;
}
第二种解决方案对我来说似乎更干净,但是当我需要一个使用一些 i18n 字符串的非空构造函数时,我有时会卡住:
@Inject
private MyMessages i18n;
public Bar(Foo foo){
/*
* do something which absolutely requires i18n here.
* The problem is that injectable attributes are called
* after the constructor so i18n is null here.
*/
foobar();
}