2011-07-03 14 views
8

जेएसआर -29 9 का अध्ययन करते हुए, मैंने Weld reference की धारा 5.1 पढ़ा जो बताता है कि सीडीआई में स्कॉप्स कैसे काम करता है। जाहिर है, संदर्भ एक अवधारणा है जो निकटता से संबंधित है। मैंने प्रत्येक के बारे में कुछ समझ लिया है लेकिन यह मेरे दिमाग में बहुत स्पष्ट रूप से अलग नहीं है और मैं शब्दों को एक दूसरे के साथ भी प्रयोग करने का लुत्फ उठाता हूं।सीडीआई में संदर्भ और दायरे के बीच अंतर - और जावा

दायरे और संदर्भ के बीच क्या अंतर है? दोनों अवधारणाओं के बीच संबंध क्या है?

मुझे सीडीआई डोमेन में एक उत्तर की उम्मीद है, लेकिन मुझे संदेह है कि मेरे पास सामान्य रूप से जावा के बारे में है, क्योंकि अवधारणाओं को अन्य संदर्भों में भी उपयोग किया जाता है। असल में, एक उत्तर जो सीडीआई के संदर्भ में अवधारणाओं को समझाता है, जावा और सामान्य रूप से अधिक अंक प्राप्त करेंगे - अगर मैं उन्हें दे सकता हूं।

उत्तर

6

प्रत्येक दायरे का एक अलग संदर्भ है।

संदर्भ बीन्स के लिए एक कंटेनर है जिसे संबंधित दायरे से परिभाषित किया गया है।

है यही कारण है कि संदर्भ कार्यान्वयन दायरे के नाम पर ले जाने के लिए - ApplicationContext, DependentContext, RequestContext, आदि

यह एक कार्यान्वयन विस्तार वास्तव में है - के रूप में CDI का एक उपयोगकर्ता आप केवल (स्कोप के बारे में जानते हैं, क्योंकि आप इसे परिभाषित करना चाहिए आपके सेम के लिए), और कार्यान्वयन यह तय करता है कि उन बीन्स को कहां रखा जाए और उनके जीवन चक्र को कैसे प्रबंधित किया जाए।

+1

अच्छा बिंदु। मुझे सीम 2 ** संदर्भ ** में यह अवधारणा है कि उपयोगकर्ता को अवधारणा थी कि उपयोगकर्ता ('@ इन', '@ आउट') के बारे में अच्छी तरह से अवगत था, जबकि सीडीआई ** स्कोप ** जाने का तरीका है। यह निश्चित रूप से परिप्रेक्ष्य में बदल गया है। –

+0

मैं इन संदर्भ वर्गों (जावाडोक या अन्य दस्तावेज) के बारे में और कहां पढ़ सकता हूं? – Puce

+0

http://docs.oracle.com/javaee/6/tutorial/doc/giwhb.html – Bozho

2

मेरी समझ यह है कि दायरा यह कहता है कि किसी ऑब्जेक्ट को किस स्थान से पहुंचा जा सकता है, जबकि संदर्भ उन वस्तुओं को समझाता है जिन्हें प्रोग्राम निष्पादन में किसी विशेष बिंदु से एक्सेस किया जा सकता है। (यानी, हम किसी ऑब्जेक्ट के दायरे और प्रोग्राम निष्पादन में किसी विशेष बिंदु पर संदर्भ के बारे में बात करते हैं।)

गणितीय रूप से बोलने, दोनों पहुंच-पहुंच संबंधों का वर्णन करते हैं, लेकिन इसे विभिन्न दिशाओं में देखें।

+0

शायद * चर * – irreputable

+0

के दायरे को कहने के लिए अधिक सटीक है, जबकि मैं सामान्य रूप से इस बात से सहमत हूं कि सीडीआई के बारे में बात करते समय यह भ्रामक होगा, क्योंकि सीडीआई वास्तव में वस्तुओं के लिए स्कॉप्स को परिभाषित करता है, चर नहीं। (सीडीआई में, एक वस्तु दायरे से बाहर हो जाती है (और इसलिए नष्ट हो जाती है) इसे इंगित करने वाले किसी भी चर से पूरी तरह से स्वतंत्र)। – meriton

+0

जावा की भावना में 'चर 'नहीं है, लेकिन सामान्य रूप से। यदि दो सत्र एक ऑब्जेक्ट साझा कर सकते हैं, तो * ऑब्जेक्ट * के * सत्र स्कोप के बारे में बात करना उचित नहीं है। – irreputable

1

सबसे पहले, हमारे पास हमारे सिर में एप्लिकेशन, सत्र, अनुरोध जैसे अवधारणाएं हैं। आइए निम्नलिखित उदाहरणों में सत्र अवधारणा का उपयोग करें।

यदि हम मानते हैं कि निष्पादन का एक टुकड़ा किसी विशेष सत्र के लिए सेवा कर रहा है, तो हम कहेंगे कि सत्र निष्पादन के संदर्भ का हिस्सा है; या, यह निष्पादन के सत्र संदर्भ है।

एक सत्र में कुछ चर हैं, उदा। userName; हम कहेंगे कि सत्र इन चरों का दायरा है।

चूंकि दोनों एक ही सत्र में इंगित कर रहे हैं, यह भ्रमित हो सकता है। उदाहरण के लिए,

get the userName from the session context 
get the userName from the session scope 

दोनों ध्वनि ठीक है, क्योंकि हम एक चर पर निष्पादन के बारे में बात कर रहे हैं।

निम्न उदाहरण गुंजाइश

the scope of the injected bean is Session 

की परिभाषा के अनुसार सुगम है, लेकिन हम समझ क्या वास्तव में हो रहा है समस्या नहीं है। यदि हम चाहते हैं, तो हम इसे तब तक विस्तारित कर सकते हैं जब तक कि यह शब्दों के मूल उपयोग के आधार पर न हो; हम ऐसा नहीं करते क्योंकि यह बहुत verbose होगा।

एक लेखक को संक्षेप में शब्दों को पैक करने के कठिन कार्य का सामना करना पड़ता है, फिर भी पाठकों को जटिल अर्थ को समझने की उम्मीद है।संदर्भ और दायरे के बारे में ग्रंथ आमतौर पर उन लोगों के लिए अस्पष्ट दिखते हैं जिन्होंने अवधारणाओं को नहीं समझा है।

एपीआई नामों के साथ आने के लिए और भी मुश्किल है, क्योंकि कोड अंग्रेजी वाक्य नहीं हैं। Context या Scope बहुत अधिक विनिमय योग्य हैं। यदि सत्र का प्रतिनिधित्व करने वाली केवल एक वस्तु है, तो कक्षा को शायद Session नाम दिया जाना चाहिए। यदि हम परिवर्तनीय हेरफेर के बारे में हिस्सा विभाजित करते हैं, तो उस भाग को SessionScope कहा जा सकता है। हालांकि, SessionContext का अर्थ बहुत ही भ्रामक है, हम अकेले नाम से सबसे अच्छा बता सकते हैं कि यह एक सत्र के बारे में है - "संदर्भ" यहां बहुत अधिक अप्रिय है।

+0

मेरी समस्या यह समझाने के लिए बिल्कुल सही है कि किसी लेख में संदर्भ और स्कॉप्स क्या हैं। आपकी व्याख्या और मेरिटॉन दोनों ही मुझे समझ में आता है और एक ही चीज़ के बारे में बात करने लगता है, हालांकि मुझे अपनी व्याख्या को "महसूस" करने के लिए और अधिक गठबंधन मिला है। मेरी आशा थी कि कुछ मानक, व्यापक रूप से अपनाए गए परिभाषाएं हों लेकिन स्पष्ट रूप से मुझे अपनी परिभाषा चुननी पड़ेगी, दुर्भाग्य से ... – brandizzi

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