Javax.inject.Named एनोटेशन को किसके लिए इस्तेमाल किया जाना चाहिए?


114

मैं javax.injectपैकेज को समझने की कोशिश कर रहा हूं और मुझे यह स्पष्ट नहीं है कि javax.inject.Namedएनोटेशन का क्या उपयोग किया जाना चाहिए। जावदोक इसके पीछे के विचार की व्याख्या नहीं करता है।

Javadoc http://download.oracle.com/javaee/6/api/javax/inject/Named.html पर है

मैं कुछ नमूना कार्यक्रमों को लिखने के लिए स्प्रिंग 3.0 का उपयोग कर रहा हूं , @Namedबीन लगाकर इसे बीन फैक्ट्री में जोड़ना प्रतीत होता है लेकिन जावेदोक विवरण इतना हल्का है कि मैं यह नहीं बता सकता कि क्या मानक व्यवहार या स्प्रिंग विशिष्ट व्यवहार है।

मेरे प्रश्न हैं:

  1. बीच क्या अंतर है @Namedऔर@Qualifier
  2. आपको कैसे बताया जाना चाहिए कि रनटाइम सिस्टम को एक वर्ग को अन्य वर्गों में इंजेक्ट किया जाना चाहिए, इसके लिए एनोटेशन क्या है? @Componentवसंत में बराबर ?

अद्यतन 1 का एक उत्कृष्ट व्याख्या है @Namedऔर @Qualifierके बारे में अच्छा लेख @Namedऔर @Qualifier https://dzone.com/articles/java-ee6-cdi-named-components धन्यवाद टिप्पणी के नीचे यह करने के लिए लिंक करने के लिए @xmedeko।


JSR-330 का विन्यास युक्ति के बाहर है, अर्थात कंटेनर विशिष्ट।
थोरबजोरन रेव एंडरसन

1
स्प्रिंग डॉक्स के अनुसार "जेएसआर 330 के @ नेमड एनोटेशन को घटकों का पता लगाने और उन्हें एक नाम प्रदान करने के लिए एक साधन के रूप में इस्तेमाल किया जा सकता है। यह व्यवहार स्वचालित रूप से सक्षम है यदि आपके पास क्लासपैथ पर जेएसआर 330 जेएआर है।" क्या यह व्यवहार वसंत के लिए या @Name को समझने वाले सभी कंटेनरों के लिए अद्वितीय है?
एम.एस.

जवाबों:


87

का प्रयोग करें @Namedकरने के लिए अंतर एक ही प्रकार एक ही दायरे में बंधे के विभिन्न वस्तुओं के बीच।

@Named("maxWaitTime")
public long maxWaitTimeMs;

@Named("minWaitTime")
public long minWaitTimeMs;

@Namedक्वालीफायर के बिना , इंजेक्टर को यह नहीं पता होगा कि किस चर को बांधना है।

  • यदि आप एनोटेशन बनाना चाहते हैं जो क्रिया करते हैं @Named, @Qualifierतो उन्हें बनाते समय एनोटेशन का उपयोग करें।

  • यदि आप देखते हैं @Named, तो यह स्वयं एनोटेट है @Qualifier


तो @ नाम वास्तव में @Qualifier है, इसलिए @Qualifier को इतना सामान्य होने की आवश्यकता क्यों है, क्या किसी को javax.inject का उपयोग करके @ Repository, @ सेवा, @ नियंत्रक जैसे @Qualifier के रूप में चिह्नित करने की अनुमति देने का विचार है?
एम एस

मुझे यकीन नहीं है कि आप रूढ़ियों के बारे में क्या मतलब है। यदि आप एक ही प्रकार के विभिन्न उदाहरणों के बीच अंतर करने के लिए नए एनोटेशन जोड़ना चाहते हैं, तो हाँ।
सेब्रिज

@Named ("maxWaitTime") के बजाय उदाहरण के लिए आपके पास @MaxWaitTime हो सकता है। यह बस थोड़ा क्लीनर है।
sourcedelica

28
के बारे में @Namedऔर @Qualifier java.dzone.com/articles/java-ee6-cdi-onym-compenders
xmedeko

मुझे समझ में नहीं आता ... क्या आप उनके अलग-अलग चर नामों से उनके बीच का अंतर नहीं बता सकते हैं?
कोडीबस्टीन

64

@Injectस्प्रिंग के बजाय है @Autowiredएक सेम सुई। बीन
@Namedके बजाय @Componentबीन घोषित करने के लिए।

उन JSR-330 मानक एनोटेशन को स्कैन किया जाता है और स्प्रिंग एनोटेशन के रूप में उसी तरह पुनर्प्राप्त किया जाता है (जब तक कि jarआपके क्लासपाथ में निम्नलिखित है)


वाक्यांश "बीन इंजेक्ट करें" अस्पष्ट है; क्या आपका मतलब है "उस बीन की निर्भरता के सभी को संतुष्ट करना" या क्या आपका मतलब है कि "बीन को उस चीज में इंजेक्ट करें जो एक आश्रित के रूप में है"?
एंड्रयू स्वान

जेएसआर समकक्षों की सूची को मैं स्प्रिंग एनोटेशन कहां से प्राप्त कर सकता हूं?
पवन

बीन इंजेक्ट करें - "उस बीन को किसी ऐसी चीज़ में इंजेक्ट करें जो एक निर्भरता के रूप में है"
नदाव फिनिश

मुझे खेद है कि पवन, मैं जेएसआर की एक सूची से परिचित नहीं हूं, जो वसंत के उद्घोषणा के समकक्ष हैं
नदाव खत्म

8

JSR-330 के अनुसार # 2 के बारे में कल्पना:

यह पैकेज निर्भरता इंजेक्शन एनोटेशन प्रदान करता है जो पोर्टेबल कक्षाओं को सक्षम करता है, लेकिन यह बाहरी निर्भरता कॉन्फ़िगरेशन को इंजेक्टर कार्यान्वयन तक छोड़ देता है।

तो यह प्रदाता पर निर्भर है कि कौन सी वस्तुएं इंजेक्शन के लिए उपलब्ध हैं। स्प्रिंग के मामले में यह सभी स्प्रिंग बीन्स है। और एनएसआर -३३० एनोटेशन के साथ एनोटेट किए गए किसी भी वर्ग को एनोटेशनकॉन्फिग्रेशनेशन कोटेक्स्ट का उपयोग करते समय स्वचालित रूप से स्प्रिंग बीन्स के रूप में जोड़ा जाता है।


5

@ नामांकित एनोटेशन की प्राथमिक भूमिका आम तौर पर जेएसएफ ईएल रिसॉल्वर के माध्यम से आवेदन के भीतर ईएल बयानों को हल करने के उद्देश्य से एक बीन को परिभाषित करना है। इंजेक्शन का उपयोग नामों के साथ किया जा सकता है, लेकिन यह नहीं था कि सीडीआई में इंजेक्शन कैसे काम करता है क्योंकि सीडीआई हमें इंजेक्शन बिंदुओं को व्यक्त करने के लिए बहुत अधिक समृद्ध तरीका देता है और सेम को उन में इंजेक्ट किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.