2016-11-22 9 views
5

जब किसी भी सेवा इंजेक्शन लगाने, मैं दो विकल्प हैं दायर इंजेक्शन से?निर्माता इंजेक्शन बनाम फील्ड इंजेक्शन

+0

इस त्रुटि के लिए सोनार विवरण क्या है? – Chris311

+2

संबंधित नियम विवरण देखें ([यह एक] (https://sonarqube.com/coding_rules#rule_key=squid%3AS3306))। मैं सुझाव देता हूं कि अगर आप अस्पष्ट रहते हैं तो उस वास्तविक विवरण पर प्रश्नों के साथ अपना प्रश्न अपडेट करें। –

+0

धन्यवाद @ निकोलस – Riadh

उत्तर

1

करो की तरह

public class ClassWhereIWantToInject{ 

    private MyService myService; 

    @Inject 
    public ClassWhereIWantToInject(MyService mySerivce){ 
     this.myService = myService; 
    } 
} 

इस संबंधित question पर (मैं आप वसंत-बूट या अपने CDI के लिए कुछ तुलनीय प्रयोग कर रहे हैं मान) कुछ वैध तर्क क्यों क्षेत्र के माध्यम से इंजेक्शन के बजाय निर्माता के माध्यम से इंजेक्शन का उपयोग करने के देखते हैं कुछ । यह लाभ के लिए उबलता है कि आप गैर-सीडीआई पर्यावरण यानी यूनिट टेस्ट में कन्स्ट्रक्टर के माध्यम से प्रारंभिककरण का उपयोग कर सकते हैं, बिना जटिल तर्क जोड़ने की आवश्यकता के।

+1

मैं ईजेबी-सीडीआई का उपयोग कर रहा हूं। सवाल यह है कि इंजेक्शन के लिए सबसे अच्छा क्यों है: फ़ील्ड या कंस्ट्रक्टर? जवाब है [यहां] (https://sonarqube.com/coding_rules#rule_key=squid%3AS3306) – Riadh

+1

हाहा, मुझे लिखने से पहले आपके प्रश्न पर टिप्पणियों को देखना चाहिए था। मैंने सोचा कि आप चेतावनी से बचना चाहते हैं, इसलिए मैंने कोड का टुकड़ा जोड़ा। – hecko84

0

जवाब here

फील्ड इंजेक्शन सही ढंग से प्रदर्शन किया जाएगा है वर्ग इस इंजेक्शन ढांचे (वसंत/EJB/CDI) द्वारा इंजेक्षन किया जाएगा जिसमें, अन्यथा (वर्ग कॉल करने वाले को का उपयोग कर instantiated हो जाएगा अगर नया ऑपरेटर) यह वास्तव में एक NullPointerException होने का इंतजार कर रहा है। इस मामले में, कन्स्ट्रक्टर इंजेक्शन का उपयोग करना बेहतर है।

हम एक विश्वसनीय क्षेत्र इंजेक्शन कर सकते हैं, जब ढांचे द्वारा इंजेक्शन कक्षा में इंजेक्शन बनाया जाएगा।

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