2012-02-13 113 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