2013-06-06 8 views
5

मैं guice उपयोग कर रहा हूँ का उपयोग करने की सिफारिश की और एक उदाहरण है कि binder().requireExplicitBindings()here उपयोग कर रहा है देखा है।
उदाहरण है कि तरह लग रहा है:यह अनिवार्य/requireExplicitBindings

Injector injector = Guice.createInjector(new SandwichModule(), new AbstractModule() { 
    @Override 
    protected void configure() { 
     binder().requireExplicitBindings(); 
     bind(GuiceFilter.class); 
    } 
}); 

कि इस तरह के

com.google.inject.ConfigurationException: Guice configuration errors: 

1) Explicit bindings are required and ... 

जैसे कुछ अपवाद का कारण बस की सिफारिश की यह इसका इस्तेमाल करने की अनिवार्य, या है? और अगर इसकी सिफारिश की गई तो मुझे आश्चर्य है कि इसका उपयोग क्यों करें?

उत्तर

3

यह (फिर इस सक्रियण के आवश्यकता के बिना एक डिफ़ॉल्ट सेटिंग हो जाएगा) और न ही आवश्यक न अनिवार्य है। आम तौर पर, जब guice उपयोग कर, आप आप एक साथ अपने आवेदन glueing मदद करने के लिए सभी "जादू" करना चाहते हैं। तो डिफ़ॉल्ट व्यवहार है: स्पष्ट बाइंडिंग की आवश्यकता नहीं है। लेकिन हर एक बार ही सही, तो आप उस guice automatisms के अपने रास्ते में ध्यान दें। उस दुर्लभ अवसरों में, आप आवश्यक स्विच का उपयोग करेंगे। मैं पूरी लेख आपके द्वारा दी गई पढ़ा नहीं था, इसलिए मैं नहीं बता सकता अगर वे इन "विशेष मामलों" में से एक के साथ काम कर रहे हैं या यदि वे सिर्फ सच में क्यों विचार किए बिना एक ध्वज का उपयोग करें। किसी भी तरह, यदि आप अपने बाध्यकारी मॉड्यूल लिखते हैं, तो बस इसे छोड़ दें।

1

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

@Inject 
private SomeClass someInstance = new SomeClass(12); 

SomeClass अब भी एक सार्वजनिक नहीं किया है -र्ग्यूमेंट कन्स्ट्रक्टर, गुइस सिर्फ कुछ कहने के बिना विशिष्ट उदाहरण को ओवरराइट करेगा।

हालांकि, स्वचालित इंजेक्शन की उपयोगिता आमतौर पर इससे अधिक वजन देती है, इसलिए इस विशिष्ट उदाहरण के लिए आपको केवल "सब कुछ इंजेक्ट करने" के लिए सावधान रहना होगा :)