2012-02-13 8 views
5

私は非常に高価なクラスキャッシュを持っていますが、それ以降はシングルトンとして設定され、私のサービス層に注入されます。私の問題は、私はGuice:遅延注入を避ける

そのメソッドの1つにアクセスしようとしている場合にのみ実行されるキャッシュに)それは(パブリックらしいです

@Override 
protected void configure() {    
    bind(Cache.class).in(Singleton.class); 

    bind(Service.class).to(ServiceImpl.class).in(Singleton.class);  
} 

@Inject 
    public ServiceImpl(Cache cache){ 
     this.cache = cache; 
    } 

public Cache(){ 
//Expensive stuff 
} 

私は何とかオブジェクトではなく、サーバーの起動時に構築され得ることはできますか?

答えて

9

はい、.asEagerSingleton()を使用してそれをバインドします。そのリンクによると、Guiceは熱心PRODUCTION段階で実行されている場合、すべてのSingleton Sを作成します(それがいい加減に速いためDEVELOPMENT段階でそれらを作成し

bind(Service.class).to(ServiceImpl.class).asEagerSingleton(); 

注意テスト展開)。 Injectorを作成するときには、Stageを指定することができます。

Injector injector = Guice.createInjector(Stage.PRODUCTION, new MyModule()); 
+0

素晴らしい、私はステージを適用する方法については全く分かりませんでした。答えを更新してくれてありがとう – javaNoober

関連する問題