Guice について懸念があり、そのシングルトンがスレッドの制限に従うかどうかについて、私が設定しようとしている可能性があります。
public class CacheModule extends AbstractModule {
@Override
protected void configure() {
// WidgetCache.class is located inside a 3rd party JAR that I
// don't have the ability to modify.
WidgetCache widgetCache = new WidgetCache(...lots of params);
// Guice will reuse the same WidgetCache instance over and over across
// multiple calls to Injector#getInstance(WidgetCache.class);
bind(WidgetCache.class).toInstance(widgetCache);
}
}
// CacheAdaptor is the "root" of my dependency tree. All other objects
// are created from it.
public class CacheAdaptor {
private CacheModule bootstrapper = new CacheModule();
private WidgetCache widgetCache;
public CacheAdaptor() {
super();
Injector injector = Guice.createInjector(bootstrapper);
setWidgetCache(injector.getInstance(WidgetCache.class));
}
// ...etc.
}
ご覧のとおり、 の新しいインスタンスを作成するたびに、CacheAdaptor
そのCacheModule
下にある依存関係ツリー全体をブートストラップするために が使用されます。
new CacheAdaptor();
複数のスレッド内から呼び出された場合はどうなりますか?
CacheAdaptor
例: スレッド #1 は引数なしのコンストラクターを介してnew を作成し、スレッド #2 は同じことを行います。Guice は各スレッドのにまったく同じインスタンスを提供しますか、それとも Guice は各スレッドに 2 つの異なるインスタンスを提供しますか? WidgetCache
CacheAdaptor
同じシングルトン インスタンスを返すことになっていtoInstance(...)
ますが、モジュールは 2 つの異なるスレッド内で作成されるため、それぞれが異なるインスタンスCacheAdaptor
を受け取ることを期待しています。WidgetCache
前もって感謝します!