JavaBean और POJO में क्या अंतर है?


210

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

जवाबों:


252

एक JavaBean कुछ सम्मेलनों का अनुसरण करता है। गेटटर / सेटर का नामकरण, सार्वजनिक डिफ़ॉल्ट कंस्ट्रक्टर होने, क्रमबद्ध होने आदि के लिए अधिक जानकारी के लिए JavaBeans कन्वेंशन देखें।

एक POJO (सादे-पुराने-जावा-ऑब्जेक्ट) को सख्ती से परिभाषित नहीं किया गया है। यह एक जावा ऑब्जेक्ट है जिसे किसी विशेष इंटरफ़ेस को लागू करने या किसी विशेष आधार वर्ग से प्राप्त करने की आवश्यकता नहीं है, या किसी दिए गए ढांचे के साथ संगत होने के लिए विशेष एनोटेशन का उपयोग करना है, और कोई भी मनमाना (अक्सर अपेक्षाकृत सरल) हो सकता है जावा ऑब्जेक्ट।


41
ध्यान दें कि एक JavaBean हो सकता है और आमतौर पर एक POJO होता है और कई POJO वास्तव में JavaBeans होते हैं।
जोआचिम सॉयर

8
नहीं, POJO की परिभाषा से एक जावा बीन एक POJO नहीं है क्योंकि एक जावा बीन माना जाने के लिए एक वर्ग को कुछ कोडिंग सम्मेलनों का पालन करना चाहिए (जैसे कि एक नो-आर्ग कंस्ट्रक्टर है, ऐसे तरीके हैं जो "पाने" और / या शब्दों से शुरू होते हैं। "सेट") या बीनइन्फो क्लास के साथ वितरित किया जाए।
नेट

15
क्योंकि ये कन्वेंशन हैं , मुझे लगता है कि आप सफलतापूर्वक यह तर्क दे सकते हैं कि बीन एक POJO हो सकता है (जैसे कि आप JavaBean इंटरफ़ेस या इसी तरह की विरासत नहीं ले रहे हैं)
ब्रायन एग्न्यू

1
JavaBeans स्पेक एक "पुन: प्रयोज्य सॉफ़्टवेयर घटक" (या कुछ ऐसे) के रूप में बहुत शिथिलता के अलावा एक जावाबीन को परिभाषित करने में विफल रहता है। इसके पास एक नो-आर्ग कंस्ट्रक्टर होना आवश्यक नहीं है, "गेट" या "सेट" के साथ शुरू होने वाले तरीकों की आवश्यकता नहीं है, सीरियल करने योग्य होने की आवश्यकता नहीं है, इसके लिए क्लास होने की भी आवश्यकता नहीं है।
टॉम हॉल्टिन -

4
गणितीय शब्दों में, हम कह सकते हैं कि जावबीन POJO का एक उप-समूह बनाते हैं, क्योंकि, POJO पर लगाई गई विशिष्ट अड़चनें इसे Javabean बनाती हैं।
निशीथ

106

सभी JavaBeans POJO हैं लेकिन सभी POJOs JavaBeans नहीं हैं।

एक जावाबीन एक जावा ऑब्जेक्ट है जो कुछ प्रोग्रामिंग सम्मेलनों को संतुष्ट करता है:

  • JavaBean क्लास को या तो Serializable या Externalizable को लागू करना चाहिए;
  • जावाबीन वर्ग में एक सार्वजनिक नो-आर्ग कंस्ट्रक्टर होना चाहिए;
  • सभी JavaBean संपत्तियों में सार्वजनिक सेटर और गेट्टर विधियाँ (उपयुक्त के रूप में) होनी चाहिए;
  • सभी JavaBean उदाहरण चर निजी होने चाहिए।

1
मुझे लगा कि पीओजेओ लागू नहीं कर सकते Serializable
naXa

10
"जावाबीन क्लास में एक नो-आर्ग कंस्ट्रक्टर होना चाहिए;" यहाँ भी सार्वजनिक जोड़ें
add:४३ पर रेडिस्टाओ

एक JavaBean धारावाहिक है और यही कारण है कि एक JavaBean एक POJO नहीं है।
करालिहानोस

25

मार्टिन फाउलर के अनुसार एक पीओजेओ एक ऐसी वस्तु है जो बिजनेस लॉजिक को एनकैप्सुलेट करती है जबकि एक बीन (अन्य उत्तरों में पहले से बताई गई परिभाषा को छोड़कर) डेटा रखने के लिए एक कंटेनर की तुलना में थोड़ा अधिक है और ऑब्जेक्ट पर उपलब्ध संचालन केवल सेट और डेटा प्राप्त करते हैं।

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

http://www.martinfowler.com/bliki/POJO.html


7

POJO: यदि किसी अन्य बाहरी पार्टी के पुस्तकालयों के समर्थन के बिना, क्लास को अंतर्निहित JDK के साथ निष्पादित किया जा सकता है, तो इसका नाम POJO है

जावाबीन: यदि वर्ग में केवल एक्सेसर्स (सेटर्स और गेटर्स) वाले गुण होते हैं, जिन्हें जावबीन कहा जाता है। जावा बीन्स में आम तौर पर कोई भी उबासी तर्क नहीं होगा, बल्कि इसका उपयोग इसमें कुछ डेटा रखने के लिए किया जाता है।

सभी Javabeans POJO हैं लेकिन सभी POJO Javabeans नहीं हैं


7

पूजो - सादा पुराना जावा वस्तु

पूजो क्लास बिना किसी विशेषता के एक साधारण वर्ग है, वर्ग पूरी तरह से प्रौद्योगिकी / ढाँचे से पूरी तरह से जुड़ा हुआ है। यह वर्ग प्रौद्योगिकी / रूपरेखा से लागू नहीं होता है और यह तकनीक / रूपरेखा एपीआई से नहीं निकलती है जिसे वर्ग पूजो कक्षा कहा जाता है।

पूजो वर्ग इंटरफेस को लागू कर सकता है और कक्षाओं का विस्तार कर सकता है लेकिन सुपर क्लास या इंटरफ़ेस एक प्रौद्योगिकी / ढांचा नहीं होना चाहिए।

उदाहरण :

1।

class ABC{
----
}

एबीसी वर्ग प्रौद्योगिकी / ढांचे से लागू या विस्तार नहीं कर रहा है यही कारण है कि यह पूजो क्लास है।

2।

class ABC extends HttpServlet{
---
}

एबीसी क्लास सर्वलेट टेक्नॉलोजी आपी से फैली हुई है, इसीलिए यह पोजो क्लास नहीं है।

3।

class ABC implements java.rmi.Remote{
----
}

एबीसी वर्ग rmi एपीआई से लागू होता है यही कारण है कि यह एक पूजो वर्ग नहीं है।

4।

class ABC implements java.io.Serializable{
---
}

यह इंटरफ़ेस जावा भाषा का हिस्सा है, न कि प्रौद्योगिकी / फ्रेमवर्क का एक हिस्सा।

5।

class ABC extends Thread{
--
}

यहाँ धागा भी जावा भाषा का वर्ग है, इसलिए यह एक पोजो वर्ग भी है।

6।

class ABC extends Test{
--
}

यदि परीक्षण वर्ग प्रौद्योगिकियों / ढांचे से विस्तार या लागू होता है तो एबीसी भी एक पूजो वर्ग नहीं है क्योंकि यह परीक्षण वर्ग के गुणों को विरासत में मिला है। यदि टेस्ट क्लास एक पॉज़ो क्लास नहीं है, तो एबीसी क्लास भी एक पॉज़ो क्लास नहीं है।

7।

अब यह बिंदु एक असाधारण मामला है

@Entity
class ABC{
--
}

@Entityहाइबरनेट आपी या जेपा आपी द्वारा दिया गया एक एनोटेशन है, लेकिन फिर भी हम इस क्लास को पूजो क्लास कह सकते हैं। प्रौद्योगिकी / रूपरेखा से दिए गए एनोटेशन के साथ वर्ग को इस असाधारण मामले द्वारा पूजो कक्षा कहा जाता है।



1

POJOSकुछ सम्मेलनों के साथ (गेट्टर / सेटर, पब्लिक नो-आर्ग कंस्ट्रक्टर, प्राइवेट वेरिएबल्स) और एक्शन में हैं (फॉर्म द्वारा डेटा पढ़ने के लिए इस्तेमाल किया जा रहा है) JAVABEANS


1

सारांश में: समानताएं और अंतर हैं:

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

सभी JAVA बीन्स POJO हैं लेकिन सभी POJO जावा बीन्स नहीं हैं।


0

ऊपर आपने औपचारिक परिभाषाएँ देखी हैं, सभी के लिए वे मूल्य हैं।

लेकिन परिभाषाओं पर ज्यादा मत टिकी रहो। आइए, यहां चीजों के भाव को देखें।

JavaBeans एंटरप्राइज़ जावा अनुप्रयोगों में उपयोग किया जाता है, जहाँ उपयोगकर्ता अक्सर नेटवर्क के माध्यम से एक सर्वर (वेब ​​या निजी नेटवर्क से) से दूरस्थ रूप से डेटा और / या अनुप्रयोग कोड का उपयोग करते हैं। इसलिए शामिल किए गए डेटा को धारावाहिक प्रारूप में उपयोगकर्ताओं के कंप्यूटर में या उसके बाहर स्ट्रीम किया जाना चाहिए - इसलिए इंटरफ़ेस को लागू करने के लिए जावा ईई ऑब्जेक्ट की आवश्यकता है। JavaBean की यह प्रकृति जावा एसई एप्लिकेशन ऑब्जेक्ट्स से भिन्न नहीं है, जिसका डेटा फ़ाइल सिस्टम में पढ़ा या लिखा जाता है। उपयोगकर्ता मशीन / ओएस संयोजनों की एक श्रृंखला से एक नेटवर्क पर जावा कक्षाओं का मज़बूती से उपयोग करना भी उनके हैंडलिंग के लिए सम्मेलनों को अपनाने की मांग करता है। इसलिए इन वर्गों को सार्वजनिक करने की आवश्यकता है, निजी विशेषताओं के साथ, एक बिना तर्क निर्माता और मानकीकृत गेटर्स और बसने वाले।

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

सभी के सभी, आप जावा बीन्स को देख सकते हैं क्योंकि सिर्फ एक नेटवर्क पर उपयोग के लिए अनुकूलित जावा ऑब्जेक्ट।

1995 के बाद से सॉफ्टवेयर की दुनिया में बहुत अधिक प्रचार - और कोई मामूली राशि नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.