2009-09-08 11 views
156

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

उत्तर

204

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

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

+32

ध्यान दें कि जावाबीन हो सकता है और आमतौर पर एक पीओजेओ होता है और कई पीओजेओ वास्तव में जावाबीन्स हैं। –

+8

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

+14

क्योंकि ये * सम्मेलन * हैं, मुझे लगता है कि आप सफलतापूर्वक तर्क दे सकते हैं कि एक बीन एक पीओजेओ हो सकता है (उदाहरण के लिए आप जावाबीन इंटरफ़ेस या इसी तरह से विरासत में नहीं हैं) –

70

सभी जावाबीन पीओजेओ हैं लेकिन सभी पीओजेओ जावाबीन नहीं हैं।

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

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

मैंने सोचा कि पीओजेओ 'सीरियलज़ेबल' लागू नहीं कर सकता है। – naXa

+6

"जावाबीन क्लास में नो-एर्ग कन्स्ट्रक्टर होना चाहिए;" ** सार्वजनिक ** यहां जोड़ें – radistao

+0

एक जावाबीन क्रमबद्ध है और यही कारण है कि जावाबीन POJO नहीं है। – karlihnos

15

मार्टिन Fowler एक POJO के अनुसार एक वस्तु जो व्यवसाय तर्क समाहित करते हुए एक बीन (परिभाषा पहले से ही अन्य उत्तर में कहा गया है को छोड़कर) उपलब्ध आंकड़ों और संचालन के आयोजन के लिए एक कंटेनर से थोड़ा अधिक वस्तु पर है केवल सेट करें और डेटा प्राप्त करें।

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

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

0

कुछ परंपराओं से POJOS (गेटर/सेटर, सार्वजनिक कोई आर्ग निर्माता, निजी चर) और एक्शन में हैं (उदा। रूप से डाटा पढ़ने में प्रयुक्त किया जा रहा) JAVABEANS हैं।

3

POJO: वर्ग केवल accessors (setters और getters) के साथ अधिक विशेषताएं हैं, तो उन कहा जाता है JavaBeans: वर्ग किसी भी अन्य बाहरी तृतीय पक्ष लाइब्रेरी तो इसकी POJO

JavaBean बुलाया समर्थन के बिना, अंतर्निहित JDK के साथ क्रियान्वित किया जा सकता है, तो जावा बीन्स में आम तौर पर कोई बोसनेस तर्क नहीं होता है बल्कि इनका उपयोग कुछ डेटा रखने के लिए किया जाता है।

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

0

Pojo - सादा वर्ष जावा वस्तु

POJO वर्ग किसी भी विशिष्टताओं के बिना एक साधारण वर्ग है, वर्ग पूरी तरह से शिथिल प्रौद्योगिकी/framework.the से मिलकर कक्षा प्रौद्योगिकी/ढांचे से लागू नहीं होती है और यह प्रौद्योगिकी/फ्रेमवर्क एपीआई से विस्तारित नहीं होती है जिसे कक्षा को पोजो वर्ग कहा जाता है।

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

उदाहरण:

1.

class ABC{ 
---- 
} 

एबीसी वर्ग को लागू करने या प्रौद्योगिकी/रूपरेखा है कि क्यों इस POJO वर्ग है से विस्तार नहीं।

2.

class ABC extends HttpServlet{ 
--- 
} 

एबीसी वर्ग सर्वलेट प्रौद्योगिकी एपीआई इसलिए यह एक POJO वर्ग नहीं है से विस्तार।

3.

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

एबीसी वर्ग RMI एपीआई इसलिए यह एक POJO वर्ग नहीं है से लागू करता है।

4.

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

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

5.

class ABC extends Thread{ 
-- 
} 

यहाँ धागा भी जावा भाषा के वर्ग तो यह भी एक POJO वर्ग है।

6.

class ABC extends Test{ 
-- 
} 

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

7.

अब इस बिंदु एक असाधारण मामला

@Entity 
class ABC{ 
-- 
} 

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

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