2012-02-13 9 views
5

Tengo un caché de clase que es bastante caro de crear, pero después de eso se configura como un singleton y se inyecta en mi capa de servicio.Guice: Evite la inyección diferida

@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 
} 

Mi problema es que parece pública() en caché sólo se ejecuta cuando estoy tratando de acceder a uno de sus métodos

¿Hay algún modo hacer que el objeto conseguir construido en el inicio del servidor en su lugar?

Respuesta

9

Sí, se unen usando .asEagerSingleton():

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

Tenga en cuenta que de acuerdo a ese enlace, Guice creará ansiosamente todas Singleton s si se ejecuta en la etapa PRODUCTION (perezosamente ellas crea en la etapa DEVELOPMENT de más rápido implementación de prueba). Se puede especificar el Stage al crear el Injector:

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

impresionante, no tenía ni idea de cómo aplicar el escenario. Gracias por actualizar la respuesta – javaNoober

Cuestiones relacionadas