मुझे प्रत्यक्ष क्षेत्र निर्भरता इंजेक्शन में रूचि है। परंपरागत रूप से, वसंत कन्स्ट्रक्टर इंजेक्शन (कन्स्ट्रक्टर को तर्क प्रदान करने) और सेटटर-आधारित इंजेक्शन (कॉल पर कॉलिंग सेटर्स) दोनों का समर्थन करता है।क्यों वसंत प्रत्यक्ष क्षेत्र निर्भरता इंजेक्शन का समर्थन नहीं करता है (ऑटोवॉयर को छोड़कर)?
हालांकि, वसंत @Autowired
के साथ एनोटेटिंग फ़ील्ड द्वारा प्रमाणित प्रत्यक्ष क्षेत्र इंजेक्शन (एक सेटर विधि के बिना किसी ऑब्जेक्ट के सदस्य फ़ील्ड को सेट करने) में भी सक्षम है। Autowiring केवल "सेम" तक सीमित है, इसलिए आदिम मूल्यों को इंजेक्शन नहीं दिया जा सकता है (हालांकि यह वर्ग "बीवा.लांग.स्ट्रिंग" वर्ग के बीन्स बनाकर कुछ हद तक बाधित किया जा सकता है - यह काम करता है, लेकिन ऑटोवॉयरिंग की सामान्य चेतावनी है।) इसके अतिरिक्त यह, स्प्रिंग @Value
का समर्थन करता है ताकि संपत्तियों से सदस्य फ़ील्ड में सीधे मूल्यों को सेट किया जा सके।
फिर भी, वसंत गुणों को सीधे सदस्य क्षेत्रों (ऑटोवॉयरिंग के बिना) पर सेट करने की अनुमति नहीं देता है।
मेरा प्रश्न है: क्यों?
यह स्पष्ट रूप से ऐसा करने में सक्षम है, तो ऐसा क्यों नहीं है? क्या कोई बड़ा नकारात्मक दुष्प्रभाव है जो इसे रोकता है? या क्या क्षमता किसी भी तरह सीमित है ताकि केवल ऑटोवॉयरिंग समझ में आती है? क्या सेटर्स को कॉल करने की तुलना में इसे कुछ बड़े हैक्स की आवश्यकता है?
ध्यान दें कि मैं सामान्य रूप से सेटर्स और गेटर्स रखने के सापेक्ष गुणों पर चर्चा नहीं करना चाहता हूं, बस कारणों से वसंत ने यह विकल्प क्यों बनाया है।
मैंने हमेशा एक ही चीजों को सोचा है और माना है कि कारण "साफ कोड बनाना" से संबंधित था और इस मूल्य के आसपास संकलक जारी करने वाली संकलक की रोकथाम-कभी-कभी-सेट-और-आप-कोशिश कर रहे हैं -इसका इस्तेमाल करें। –