Depedency Injection Google Guice Framework を使用するプロジェクトに取り組んでいます。
Guice では、次のようにシングルトン スコープでクラスをバインドできます。
bind(Foo.class).to(FooImpl.class).in(Scopes.SINGLETON);
FooImpl
class 自体が次のような実際のシングルトン クラスである場合:
public class FooImpl implements Foo{
public static final FooImpl INSTANCE = new FooImpl();
public static FooImpl getInstance(){...}
// ...
}
また
public class FooImpl implements Foo{
private FooImpl instance = null;
private FooImpl(){...}
public static FooImpl getInstance(){
if(instance == null)
instance = new FooImpl();
return FooImpl();
// ...
}
// ...
}
そのため、プロジェクトで 2 つのシングルトンを宣言することが可能です。1 つ目は Guice によって宣言され、2 つ目はgetInstance()
従来の方法で宣言されます。
Google Guice は、メソッドを使用してインターフェイスを特定のインスタンスにバインドすることもできますtoInstance()
。
したがって、Singleton スコープでバインドする代わりに、Java で次の宣言を使用して Singleton をバインドするより良い方法ではありません。
bind(Foo.class).toInstance(FooImpl.getInstance());
最初のものの代わりに?より安全ですか?そのように2つのシングルトンインスタンスを持つことは可能ですか?
Google Guice でシングルトンを宣言する最良の方法は何ですか?