ฉันไม่แน่ใจเกี่ยวกับความแตกต่าง ฉันใช้ Hibernate และในหนังสือบางเล่มพวกเขาใช้ JavaBean และ POJO เป็นคำที่ใช้แทนกันได้ ฉันต้องการทราบว่ามีความแตกต่างไม่ใช่แค่ในบริบทของไฮเบอร์เนต แต่เป็นแนวคิดทั่วไป
ฉันไม่แน่ใจเกี่ยวกับความแตกต่าง ฉันใช้ Hibernate และในหนังสือบางเล่มพวกเขาใช้ JavaBean และ POJO เป็นคำที่ใช้แทนกันได้ ฉันต้องการทราบว่ามีความแตกต่างไม่ใช่แค่ในบริบทของไฮเบอร์เนต แต่เป็นแนวคิดทั่วไป
คำตอบ:
JavaBean ปฏิบัติตามอนุสัญญาบางอย่าง การตั้งชื่อ Getter / setter มีตัวสร้างค่าเริ่มต้นสาธารณะเป็นแบบอนุกรมและอื่น ๆ ดูที่JavaBeans Conventionsสำหรับรายละเอียดเพิ่มเติม
POJO (วัตถุธรรมดา Java-object) ไม่ได้ถูกกำหนดอย่างเข้มงวด มันเป็นวัตถุ Java ที่ไม่มีความต้องการที่จะใช้ส่วนต่อประสานที่เฉพาะเจาะจงหรือสืบทอดมาจากคลาสพื้นฐานที่เฉพาะเจาะจงหรือใช้ประโยชน์จากคำอธิบายประกอบเฉพาะเพื่อให้เข้ากันได้กับกรอบงานที่กำหนดและสามารถเป็นกฎเกณฑ์ใดก็ได้ วัตถุ Java
JavaBeans ทั้งหมดเป็น POJO แต่ไม่ใช่ POJO ทั้งหมดเป็น JavaBeans
JavaBean เป็นวัตถุ Java ที่เป็นไปตามข้อกำหนดการเขียนโปรแกรมบางอย่าง:
Serializable
ได้
มาร์ตินฟาวเลอร์ POJO เป็นวัตถุที่ห่อหุ้มตรรกะทางธุรกิจในขณะที่ถั่ว (ยกเว้นคำจำกัดความที่ระบุไว้แล้วในคำตอบอื่น ๆ ) เป็นมากกว่าภาชนะสำหรับเก็บข้อมูลและการดำเนินงานที่มีอยู่บนวัตถุเพียงตั้งค่าและรับข้อมูล
คำประกาศเกียรติคุณในขณะที่ Rebecca Parsons, Josh MacKenzie และฉันกำลังเตรียมตัวสำหรับการพูดคุยในการประชุมในเดือนกันยายน 2000 ในการพูดคุยเราได้ชี้ให้เห็นถึงประโยชน์มากมายของการเข้ารหัสตรรกะทางธุรกิจลงในวัตถุจาวาปกติแทนที่จะใช้ Entity Beans เราสงสัยว่าทำไมผู้คนถึงต่อต้านการใช้วัตถุปกติในระบบของพวกเขาและสรุปว่าเป็นเพราะวัตถุธรรมดา ๆ ไม่มีชื่อแฟนซี ดังนั้นเราจึงให้พวกเขาหนึ่งอันและมันก็ติดแน่นมาก
POJO: ถ้าคลาสสามารถดำเนินการได้ด้วย JDK ที่อยู่ภายใต้การสนับสนุนโดยไม่ต้องมีไลบรารีบุคคลที่สามภายนอกอื่นจากนั้นจะเรียกว่า POJO
JavaBean: หากคลาสมีเพียงแอ็ตทริบิวต์ที่มี accessors (setters และ getters) ที่เรียกว่า javabeans โดยทั่วไปแล้ว Java beans จะไม่มีตรรกะทางธุรกิจที่ค่อนข้างจะใช้สำหรับเก็บข้อมูลบางอย่าง
Javabeans ทั้งหมดเป็น POJO แต่ POJO ทั้งหมดไม่ใช่ Javabeans
Pojo - วัตถุ java เก่าธรรมดา
คลาส pojo เป็นคลาสธรรมดาที่ไม่มีความพิเศษใด ๆ คลาสที่รวมกันอย่างหลวม ๆ จากเทคโนโลยี / กรอบงานคลาสนั้นไม่ได้ดำเนินการจากเทคโนโลยี / กรอบงานและไม่ได้ขยายจากเทคโนโลยี / กรอบงาน API ที่คลาสนั้นเรียกว่าคลาส pojo
คลาส pojo สามารถใช้อินเตอร์เฟสและขยายคลาสได้ แต่คลาสซูเปอร์หรืออินเตอร์เฟสไม่ควรเป็นเทคโนโลยี / กรอบงาน
ตัวอย่าง :
1
class ABC{
----
}
คลาส ABC ไม่ได้นำไปใช้หรือขยายจากเทคโนโลยี / กรอบงานนั่นคือสาเหตุที่คลาส pojo
2
class ABC extends HttpServlet{
---
}
คลาส ABC ขยายจากเทคโนโลยี servlet api นั่นคือสาเหตุที่นี่ไม่ใช่คลาส pojo
3
class ABC implements java.rmi.Remote{
----
}
คลาส ABC ใช้จาก rmi api นั่นคือสาเหตุที่นี่ไม่ใช่คลาส pojo
4
class ABC implements java.io.Serializable{
---
}
ส่วนต่อประสานนี้เป็นส่วนหนึ่งของภาษาจาวาไม่ได้เป็นส่วนหนึ่งของเทคโนโลยี / framework.so นี่คือคลาส pojo
5
class ABC extends Thread{
--
}
เธรดที่นี่ยังเป็นคลาสของภาษาจาวาดังนั้นนี่จึงเป็นคลาส pojo
6
class ABC extends Test{
--
}
ถ้าคลาสการทดสอบขยายหรือนำมาใช้จากเทคโนโลยี / เฟรมเวิร์ก ABC ก็ไม่ใช่คลาส pojo เพราะมันจะสืบทอดคุณสมบัติของคลาสการทดสอบ ถ้าคลาสทดสอบไม่ใช่คลาส pojo ดังนั้นคลาส ABC ก็ไม่ใช่คลาส pojo
7
ตอนนี้จุดนี้เป็นกรณีพิเศษ
@Entity
class ABC{
--
}
@Entity
เป็นคำอธิบายประกอบที่กำหนดโดย hibernate api หรือ jpa api แต่เรายังสามารถเรียกคลาสนี้ว่าคลาส pojo คลาสที่มีคำอธิบายประกอบที่ได้รับจากเทคโนโลยี / กรอบเรียกว่าคลาส pojo โดยกรณีพิเศษนี้
POJOS
มีการประชุมบางอย่าง (getter / หมาประชาชนคอนสตรัคไม่มีหาเรื่องตัวแปรเอกชน) และอยู่ในการดำเนินการ (อดีต. ถูกนำมาใช้สำหรับการอ่านข้อมูลตามรูปแบบ) JAVABEANS
เป็น
โดยสรุป: ความเหมือนและความแตกต่างคือ:
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 Beans ทั้งหมดเป็น POJO แต่ไม่ใช่ POJO ทั้งหมดคือ JAVA Beans
คุณเคยเห็นคำจำกัดความที่เป็นทางการข้างต้นสำหรับสิ่งที่พวกเขามีค่า
แต่อย่าเพิ่งแฮงค์คำจำกัดความ ลองดูที่ความหมายของสิ่งต่าง ๆ ที่นี่
JavaBeans ใช้ในแอปพลิเคชัน Enterprise Java ที่ผู้ใช้เข้าถึงข้อมูลและ / หรือรหัสแอปพลิเคชันจากระยะไกลเช่นจากเซิร์ฟเวอร์ (ผ่านเว็บหรือเครือข่ายส่วนตัว) ผ่านเครือข่าย ข้อมูลที่เกี่ยวข้องจะต้องถูกสตรีมในรูปแบบอนุกรมเข้าหรือออกจากคอมพิวเตอร์ของผู้ใช้ดังนั้นความต้องการวัตถุ Java EE ในการใช้งานอินเตอร์เฟส Serializable ลักษณะส่วนใหญ่ของ JavaBean นี้ไม่แตกต่างจากแอปพลิเคชัน Java SE ที่มีการอ่านข้อมูลจากหรือเขียนไปยังระบบไฟล์ การใช้คลาส Java อย่างเชื่อถือได้ผ่านเครือข่ายจากชุดของเครื่องผู้ใช้ / ระบบปฏิบัติการที่หลากหลายยังต้องการการยอมรับของอนุสัญญาสำหรับการจัดการของพวกเขา ดังนั้นความต้องการสำหรับการใช้งานคลาสเหล่านี้เป็นแบบสาธารณะพร้อมกับแอ็ตทริบิวต์ส่วนตัวคอนสตรัคเตอร์ที่ไม่มีอาร์กิวเมนต์และตัวรับสัญญาณมาตรฐานและตัวตั้งค่า
แอปพลิเคชัน Java EE จะใช้คลาสอื่นนอกเหนือจากที่ใช้งานเป็น JavaBeans สิ่งเหล่านี้สามารถใช้ในการประมวลผลข้อมูลอินพุตหรือจัดระเบียบข้อมูลเอาต์พุต แต่จะไม่ใช้สำหรับวัตถุที่ถ่ายโอนผ่านเครือข่าย ดังนั้นข้อควรพิจารณาข้างต้นไม่จำเป็นต้องนำไปใช้กับแถบเหล่านั้นที่ถูกต้องเป็นวัตถุ Java คลาสหลังเหล่านี้เรียกว่า POJOs - วัตถุ Java แบบเก่าแบบธรรมดา
โดยรวมแล้วคุณสามารถเห็น Java Beans เป็นเพียงวัตถุ Java ที่ปรับให้ใช้ผ่านเครือข่าย
มีโฆษณาเกินจริงมากมาย - และไม่มีการถ่อมตัวในโลกซอฟต์แวร์ตั้งแต่ปี 1995