2012-08-31 20 views
11

ठीक है, तो मेरे पास एक जेएसएफ बैकिंग बीन है जिसे किसी अन्य (@NoneScoped) बीन के संदर्भ की आवश्यकता है।इंजेक्शन बनाम प्रबंधित Property

क्या मुझे कंटेनर से एक उदाहरण संदर्भ प्राप्त करने के लिए @ इंजेक्ट करें या @ManagedProperty का उपयोग करना चाहिए?

क्यों एक और दूसरे का उपयोग करें, मेरे दिमाग में दो दृष्टिकोण एक ही चीज़ प्राप्त करते हैं।

उत्तर

10

@ManagedProperty और @NoneScoped जेएसएफ 2.0 spec से आता है जबकि @Inject सीडीआई स्पेक से आता है।

यदि आप केवल एक सर्वलेट एप्लिकेशन पर काम कर रहे हैं जो किसी भी अन्य जावाईई 6 सुविधाओं का कोई उपयोग नहीं करता है, तो @ManagedProperty के लिए जाएं। उस एनोटेशन के पास @Inject के खिलाफ भी एक लाभ है: आप इसके साथ ईएल (अभिव्यक्ति भाषा) का उपयोग कर सकते हैं (although there are workarounds to get that in CDI)।

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

यह रैपिंग ऊपर, के रूप में ऐसा लगता है कि तुम सिर्फ JSF सुविधाओं @ManagedProperty को छड़ी का उपयोग कर रहे तो (CDI @NoneScoped एनोटेशन, यदि कुछ भी निर्दिष्ट CDI में सभी सेम @Default दायरे के तहत कर रहे समझ में नहीं कर सकते हैं)। आपकी परियोजना में सीडीआई में स्विच करने से को @Inject एक के लिए प्रतिस्थापित नहीं किया जा सकता है, लेकिन सीडीआई-विशिष्ट वाले लोगों के लिए आपके सभी @RequestScoped (और इसी तरह)।

6

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

+2

मैं इस, क्या नीचे है के लिए इसी तरह जोड़ना होगा, आप चीजों को EJBs की तरह आप CDI साथ इंजेक्षन कर सकते हैं। यदि आप उन्हें @ नाम नहीं देते हैं (जो उन्हें ईएल के लिए उपलब्ध कराते हैं) तो आप उन्हें अपने विचार से भी बाहर रख सकते हैं। सीडीआई का उपयोग करने से आपको जेएसएफ में जो भी उपलब्ध है उससे ज्यादा विस्तार बिंदु मिलते हैं, लेकिन यह सवाल का हिस्सा नहीं है :) मैं सीडीआई के साथ चिपकने का सुझाव देता हूं। – LightGuard

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

  • कोई संबंधित समस्या नहीं^_^