2012-02-13 16 views
5

मेरे पास एक क्लास कैश है जो बनाने के लिए काफी महंगा है, लेकिन उसके बाद एक सिंगलटन के रूप में सेट किया गया है और मेरी सेवा परत में इंजेक्शन दिया गया है।गिइस: आलसी इंजेक्शन से बचें

@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 चरण में चलाया जा रहा पैदा करेगा (यह lazily उन्हें DEVELOPMENT चरण में तेजी के लिए बनाता है परीक्षण तैनाती)। जब Injector बनाते समय Stage निर्दिष्ट कर सकते हैं:

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

भयानक, मैं कैसे स्टेज लागू करने के लिए पर पता नहीं था। उत्तर अद्यतन करने के लिए धन्यवाद – javaNoober

संबंधित मुद्दे