2011-03-24 27 views
81

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

जावाडोक http://download.oracle.com/javaee/6/api/javax/inject/Named.html

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

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

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

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

+0

जेएसआर-330 की कॉन्फ़िगरेशन spec के बाहर है, यानी कंटेनर विशिष्ट। –

+1

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

उत्तर

54

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

@Named("maxWaitTime") 
public long maxWaitTimeMs; 

@Named("minWaitTime") 
public long minWaitTimeMs; 

@Named विशेषक के बिना, इंजेक्टर जो लंबे समय से जो चर करने के लिए बाध्य करने के लिए पता नहीं होता।

यदि आप एनोटेशन की तरह कार्य करने वाले एनोटेशन बनाना चाहते हैं, तो उन्हें बनाते समय @ क्वालीफायर एनोटेशन का उपयोग करें। यदि आप @ नामांकित देखते हैं, तो यह स्वयं @Qualifier के साथ एनोटेटेड है।

+0

तो @ नामांकित वास्तव में @ क्वालिफायर है, तो @Qualifier को इतना सामान्य क्यों होना चाहिए, क्या किसी व्यक्ति को @ रेपॉजिटरी, @ सेवा, @ नियंत्रक जैसे स्टीरियोटाइप को परिभाषित करने के लिए javax.inject का उपयोग करने की अनुमति देने का विचार है जिसे @ क्वालीफायर के रूप में चिह्नित किया गया है? – ams

+0

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

+0

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

7
# 2 के बारे में

, JSR-330 कल्पना के अनुसार:

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

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

31

@ वसंत के @ इंटरेयर के बजाय इंजेक्शन एक बीन इंजेक्ट करने के लिए।
@ वसंत के @ कॉम्पोनेंट के बजाय नामित एक बीन घोषित करने के लिए नामित।
उन JSR-330 मानक एनोटेशन स्कैन और स्प्रिंग टिप्पणी के रूप में एक ही तरीके से प्राप्त किए गए हैं (जब तक कि निम्न जार अपने classpath में है)

+0

वाक्यांश "इंजेक्ट एक बीन" संदिग्ध है; क्या आपका मतलब है कि "उस बीन की निर्भरताओं को पूरा करें" या क्या आपका मतलब है कि उस बीन को उस चीज़ में इंजेक्ट करें जो इसे निर्भरता के रूप में रखता है "? –

+0

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

+0

एक बीन इंजेक्ट करें - "उस बीन को इंजेक्ट करें जिसमें इसे निर्भरता के रूप में रखा गया है" –

2

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

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