@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
(और इसी तरह)।
स्रोत
2012-08-31 13:20:21
मैं इस, क्या नीचे है के लिए इसी तरह जोड़ना होगा, आप चीजों को EJBs की तरह आप CDI साथ इंजेक्षन कर सकते हैं। यदि आप उन्हें @ नाम नहीं देते हैं (जो उन्हें ईएल के लिए उपलब्ध कराते हैं) तो आप उन्हें अपने विचार से भी बाहर रख सकते हैं। सीडीआई का उपयोग करने से आपको जेएसएफ में जो भी उपलब्ध है उससे ज्यादा विस्तार बिंदु मिलते हैं, लेकिन यह सवाल का हिस्सा नहीं है :) मैं सीडीआई के साथ चिपकने का सुझाव देता हूं। – LightGuard