2011-07-05 10 views
13

निम्नलिखित अनुरोध-दायरे वाले CDI सेम पर विचार करें:सीडीआई में एक बड़े दायरे के बीन उदाहरण में इंजेक्शन वाले एक छोटे से दायरे का बीन उदाहरण - यह कैसे काम करता है?

@RequestScoped 
public class RequestScopedBean { 
    // ... 
} 

अब, मैं एक आवेदन-दायरे वाले सेम में यह इंजेक्षन:

@ApplicationScoped 
public class ApplicationScopedBean { 
    @Inject private RequestScopedBean requestScopedBean; 
    // ... 
} 

मैं इस कोड भाग गया और कहा गया है कि अनुरोध-दायरे वाले सेम उदाहरण दो अनुरोधों के बीच अलग है लेकिन एप्लिकेशन-स्कोप्ड बीन इंस्टेंस समान है। मेरा शक है: यह कैसे काम करता है? क्या अनुरोध-स्कोप्ड बीन इंस्टेंस प्रत्येक अनुरोध पर एप्लिकेशन-स्कोप्ड फ़ील्ड में पुनः सबमिट किया गया है? या एप्लिकेशन-स्कोप्ड बीन की प्रॉक्सी सिर्फ अनुरोधों के बीच बदलती है?

+5

यह कैसे काम करता है [http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#d0e1429) जांचें। –

+0

@jangroth [4.9 क्लाइंट प्रॉक्सी] (http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#_client_proxies) अध्याय एक सिंहावलोकन देता है लेकिन यह स्पष्ट नहीं करता कि यह वास्तव में कैसे काम करता है । विशेष रूप से, क्या होता है जब एक '@ एप्लिकेशनस्कोप्ड' बीन में 'सत्र सत्र' बीन इंजेक्शन होता है, और '@ RequestScoped' विधियों से दो समांतर आमंत्रण प्राप्त करता है? – Alex

+1

* आपने नोटिस किया था कि 4 साल पहले सवाल पूछा गया था, और उस दौरान सीडीआई/वेल्ड (और इसके दस्तावेज़ीकरण) में कुछ संस्करण बाधाएं थीं? ;) –

उत्तर

6

सीडीआई में प्रत्येक इंजेक्शन ऑब्जेक्ट वास्तव में प्रॉक्सी है। तो उस स्थिति में, प्रॉक्सी शायद RequestContext का संदर्भ रखती है और प्रत्येक विधि आमंत्रण पर सही बीन उदाहरण मिलता है।

+1

कोर में सच है, लेकिन विस्तार से नहीं। 'आश्रित स्कोप्ड' बीन्स कभी भी प्रॉक्सी नहीं होंगे, साथ ही साथ 'सिंगलटनस्कोप्ड' बीन्स भी होंगे। दोनों स्कॉप्स तथाकथित छद्म स्कॉप्स हैं। –

+0

क्या आवेदन एक छद्म गुंजाइश है? मुझे यकीन नहीं है। वैसे भी, मेरा बिंदु विशेष उदाहरण - अनुरोध संदर्भ के बारे में था। – Bozho

+0

नहीं, एप्लिकेशनस्कोप नहीं, लेकिन [सिंगलटनस्कोप] (http://docs.jboss.org/weld/reference/latest/en-US/html/scopescontexts.html#d0e1923) है। यही कारण है कि एप्लिकेशनस्कोप का उपयोग करना हमेशा बेहतर होता है :-) –

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