मेरी समस्या का हिस्सा यहां उचित शब्दावली का उपयोग कर रहा है, इसलिए मैं पहले से माफी माँगता हूं कि शब्दावली का एक साधारण मामला क्या हो सकता है।मैं एक सीडीआई निर्माता विधि के उपयोग को कैसे मजबूर करूं?
मान लीजिए कि मेरे पास Person
इंटरफ़ेस है, और PersonBean
कक्षा जो उस इंटरफ़ेस को लागू करती है।
मान लीजिए कि मेरे पास कहीं निर्माता निर्माता है (एनोटेटेड @Produces
) जो Person
देता है। आंतरिक रूप से यह एक नया PersonBean
देता है, लेकिन यह न तो यहां और न ही वहां है।
अंत में, मैं एक इंजेक्शन बिंदु इस तरह परिभाषित के साथ एक और CDI सेम कहीं लगता है:
@Inject
private Person person;
मान लिया जाये कि मैं जगह आदि में मेरे सभी beans.xml
फ़ाइलें और वेल्ड या किसी अन्य CDI-1.0-अनुपालक को चलाया है, पर्यावरण, क्योंकि यह सब खड़ा है मुझे एक अस्पष्ट परिभाषा त्रुटि मिलेगी। यह समझ में आता है: वेल्ड इंजेक्शन के लिए उम्मीदवार के रूप में मेरा PersonBean
पायेगा (यह केवल कन्स्ट्रक्टर को कॉल कर सकता है) और इंजेक्शन के लिए उम्मीदवार के रूप में मेरे निर्माता विधि का आउटपुट पायेगा।
मैं जो करना चाहता हूं वह किसी भी तरह से उत्पादक विधि के माध्यम से हमेशा इस मार्ग में Person
उदाहरणों के उत्पादन को मजबूर करता है।
मुझे समझ में आता है कि मैं कहीं कुछ क्वालीफायर का आविष्कार कर सकता हूं और निर्माता विधि को Person
उदाहरणों का उत्पादन कर सकता हूं जो कि क्वालीफायर द्वारा योग्य हैं। यदि मैं ऐसा करता हूं, और क्वालीफायर को शामिल करने के लिए अपना इंजेक्शन पॉइंट बदलता हूं, तो स्पष्ट रूप से इन योग्य इंजेक्टेबल (अर्थात् मेरे निर्माता विधि) का केवल एक स्रोत होता है, इसलिए voila, समस्या हल हो जाती है।
लेकिन मान लीजिए कि मैं कुछ फर्जी क्वालीफायर का आविष्कार नहीं करना चाहता हूं। (मैं यह नहीं कह रहा हूं कि यह मामला है; बस मुद्दों को और गहराई से समझने की कोशिश कर रहे हैं।) मेरे विकल्प क्या हैं? क्या मेरे पास कोई है? मुझे लगता है मैं PersonBean
पर @Typed(Object.class)
डाल इसे बनाने के लिए इतना है कि यह CDI द्वारा एक Person
के रूप में नहीं देखा गया था सकता है लगता है ....
किसी भी प्रलेखन के संकेत दिए गए हैं, या बेहतर तरीके से समझा जा सहित स्वागत विचारों,। धन्यवाद।
तो मूल रूप से: सीडीआई 1.0 में '@ टाइप की गई एनोटेशन का उपयोग करके इसे मजबूर नहीं कर सकता है? –
मुझे यकीन नहीं है कि मैं आपकी टिप्पणी समझता हूं। आप सोल्डर से '@ अनवरप्स 'का उपयोग कर स्वतंत्र रूप से उत्पादन को मजबूर कर सकते हैं। और सीडीआई में '@ टाइपेड' जैसी कोई चीज़ नहीं है ...! –
'@ टाइप किया गया ': http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Typed.html संक्षेप में, आप बीन प्रकारों को वापस फेंक देते हैं जो आपके बीन सीडीआई इनकारों के सामने आते हैं। यह सीडीआई मशीनरी को आपके ऑब्जेक्ट से हाथ रखने और अपने निर्माता विधि को तुरंत चालू करने की इजाजत देने का एक तरीका होगा। मेरा उपयोग केस 'लॉगर' इंस्टेंस (कोई नो-एर्ग कन्स्ट्रक्टर!) बना रहा है ताकि मैं लॉग ऑन होने पर 'LogRecord' के प्रकार को नियंत्रित कर सकूं। –