2012-06-12 7 views
23

यह एक नोब सवाल हो सकता है, हालांकि कई ट्यूटोरियल और उदाहरणों में मैंने इन एनोटेशन का उपयोग किया जैसे कि उन्होंने वही किया।JSF2.0 में @Named और @ManagedBean एनोटेशन के बीच अंतर Tomcat7

हालांकि मैं @Named एक (विशेष रूप से निर्भरता इंजेक्शन इत्यादि के साथ) का उपयोग करके कुछ सीमाओं में भाग गया। मुझे कोई स्रोत नहीं मिला जहां अंतर समझाया गया है और यदि कोई व्यक्ति किसी न किसी तरह का अवलोकन कर सकता है तो मैं बहुत आभारी हूं एक या दूसरे का उपयोग करने के लिए।

+1

किस तरह की सीमाएं? '@ प्रबंधित बीन '' नामांकित' के कार्यों का सबसेट है, इसलिए 'नामांकित' को हर जगह काम करना चाहिए। –

उत्तर

36

@Named जेएसएफ या जेएसपी जैसी प्रौद्योगिकियों में सीडीआई प्रबंधित ईएल नाम का उपयोग करने के लिए एक ईएल नाम प्रदान करता है। ध्यान दें कि एक सीडीआई आवेदन में आप को @Named एनोटेशन की आवश्यकता नहीं है ताकि सीडीआई द्वारा प्रबंधित बीन (उसकी टिप्पणी के लिए @ करल के लिए धन्यवाद)।

@ManagedBean सेम JSF द्वारा प्रबंधित करता है और आप कर सकते हैं:

  • अन्य @ManagedBean एनोटेट सेम को इसकी सुई अभिव्यक्ति भाषा
  • के माध्यम से अपने विचारों से
  • पहुँच यह (लेकिन @Named बीन्स में नहीं है!)

यह जानकारी related question को और जानकारी के लिए देखें कि कैसे इंजेक्शन दोनों प्रकार के सेम के बीच काम करता है।

ध्यान दें कि सेम के दायरे में भी अंतर है। वे विभिन्न संकुल से आते हैं लेकिन हूबहू JSF नाम हैं (: javax.faces.bean, CDI: javax.enterprise.context, तो यह अक्सर त्रुटि और भ्रम की स्थिति है, तो आप गलत वर्ग में शामिल एक स्रोत है

मेरे अनुभव से:। आप जब भी संभव हो CDI सेम का उपयोग करना चाहिए चूंकि वे जेएसएफ प्रबंधित बीन्स की तुलना में अधिक लचीला हैं। केवल दोष यह है कि सीडीआई को एक दृश्य क्षेत्र नहीं पता है, इसलिए आपको या तो @ManagedBean पर वापस आने की आवश्यकता है या सीम जैसे कुछ तीसरे पक्ष के विस्तार का उपयोग करना है।

+1

+1। @matt: मुझे लगता है कि 'RequestScoped + KeepAlive = ViewScoped' ताकि इसका उपयोग @ नामित। क्या मैं सही हूँ? – Addicted

+0

@ अहिनाव: KeepAlive Richfaces जैसे कुछ घटक पुस्तकालय से? –

+0

आपकी व्याख्या के लिए बहुत बहुत धन्यवाद! – user871784

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