2013-02-25 92 views
6

स्प्रिंग, javax.annotation.Resource और javax.inject.Named में नाम से निर्भरता इंजेक्शन करने के लिए दो अलग-अलग टिप्पणियां हैं। documentation at Spring इंगित करता है @Resource नाम से इंजेक्शन के लिए इस्तेमाल किया जाना चाहिए:वसंत निर्भरता इंजेक्शन, @ नामांकित या @ संसाधन का उपयोग करने के लिए?

आप नाम से एनोटेशन चालित इंजेक्शन व्यक्त करने के लिए करना चाहते हैं, मुख्य रूप से @Autowired का उपयोग नहीं करते हैं, भले ही एक सेम नाम के चर्चा करते हुए की तकनीकी रूप से सक्षम है @Qualifier मूल्यों के माध्यम से। इसके बजाय, JSR-250 @ संसाधन एनोटेशन का उपयोग करें, जिसे विशिष्ट लक्ष्य घटक को अपने अद्वितीय नाम से पहचानने के लिए अर्थात् परिभाषित किया गया है, घोषित प्रकार मिलान प्रक्रिया के लिए अप्रासंगिक है। के रूप में वसंत केवल @Autowired@Qualifer के साथ संयुक्त के बजाय @Resource की वकालत कर रहा है

ऊपर, थोड़ा भ्रामक है। later in the documentation तक @Named का कोई उल्लेख नहीं है।

जेएसआर -50 @Resource परिभाषित करता है, जबकि जेएसआर-330 @Inject और @Named परिभाषित करता है। मुझे पता है कि वे आसानी से वसंत के भीतर मिश्रित और मिलान कर सकते हैं। किस जेएसआर का उपयोग करना है?

ऐसा लगता है जैसे गुइस और सीडीआई के साथ पोर्टेबिलिटी अच्छा होगा, और इसलिए जेएसआर-330 एनोटेशन का उपयोग करने के लिए। दूसरी ओर, दस्तावेज जेएसआर-330 एनोटेशन का उपयोग करते समय वसंत के भीतर limitations पर भी इंगित करता है।

एनोटेशन इंजेक्शन-बाय-नाम के लिए सबसे अच्छा अभ्यास (यदि कोई है तो) क्या है?

धन्यवाद।

+1

उल्लिखित सीमाएं केवल संदर्भ देती हैं कि स्प्रिंग उन एनोटेशन का उपयोग कैसे करेगी, और स्प्रिंग के साथ काम करने के लिए स्प्रिंग के बारे में बताए गए एनोटेशन कितने मजबूत हैं। –

+0

सीमाएं सभी कठिन लगती नहीं हैं। हालांकि वे मौजूद हैं। ऐसा लगता है कि वसंत ने अतिरिक्त सीडीआई एनोटेशन को भी अपनाया था, तो यह बहुत आसान होगा। – Saish

उत्तर

1

@ संसाधन पुराना है और वसंत 2.5 के बाद से समर्थित है जबकि @ नामित समर्थन वसंत 3.0 में जोड़ा गया है और इन दोनों का उपयोग इंजेक्शन-बाय-नाम के समान उद्देश्य को प्राप्त करने के लिए किया जा सकता है।

वसंत का उपयोग करते समय, दूसरी तरफ एक को पसंद करने के लिए मेरी चिंताओं स्प्रिंग 2.5 के साथ पिछड़ा संगतता होगी और क्या javax.inject को क्लासपाथ पर जोड़ा जा सकता है या माना जा सकता है।

+0

@ इंजेक्ट @ नामांकित ("बीननाम") वसंत 3.0.7 में मेरे लिए काम नहीं करता है लेकिन @Resource (name = "beanName") करते हैं। –

+0

क्या क्लासपाथ पर javax.inject या javaee-api jar है? बस सुनिश्चित करें कि ऐसा इसलिए है क्योंकि \ @Inject और \ @ नाम के लिए समर्थन स्प्रिंग 3.0.0 के बाद जोड़ा गया है। –