2012-02-13 151 views
5

我有一個類Cache,創建起來相當昂貴,但之後被設置爲單例並注入到我的服務層。Guice:避免懶惰注入

@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()綁定:

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

注意的是,根據該鏈接,Guice會熱切地創建所有Singleton■如果在PRODUCTION階段中運行(它懶洋洋地創建他們在DEVELOPMENT階段更快測試部署)。您可以在創建Injector時指定Stage

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

真棒,我對如何運用舞臺不知道。感謝您更新答案 – javaNoober 2012-02-13 04:18:44