Apa perbedaan antara JavaBean dan POJO?


210

Saya tidak yakin tentang perbedaannya. Saya menggunakan Hibernate dan, dalam beberapa buku, mereka menggunakan JavaBean dan POJO sebagai istilah yang dapat dipertukarkan. Saya ingin tahu apakah ada perbedaan, tidak hanya dalam konteks Hibernate, tetapi sebagai konsep umum.

Jawaban:


252

JavaBean mengikuti konvensi tertentu. Penamaan pengambil / penyetel, memiliki konstruktor default publik, menjadi serialisable dll. Lihat Konvensi JavaBeans untuk lebih jelasnya.

POJO (objek Java-lama-biasa) tidak didefinisikan dengan ketat. Ini adalah objek Java yang tidak memiliki persyaratan untuk mengimplementasikan antarmuka tertentu atau berasal dari kelas dasar tertentu, atau memanfaatkan anotasi tertentu agar kompatibel dengan kerangka kerja yang diberikan, dan dapat berupa sembarang (seringkali relatif sederhana) Objek Jawa.


41
Perhatikan bahwa JavaBean bisa dan biasanya POJO dan banyak POJO sebenarnya JavaBeans.
Joachim Sauer

8
Tidak, menurut definisi POJO Java Bean bukan POJO karena untuk dianggap Java Bean suatu kelas harus mengikuti konvensi pengkodean tertentu (mis. Memiliki konstruktor no-arg, memiliki metode yang dimulai dengan kata "get" dan / atau "set") atau didistribusikan dengan kelas BeanInfo.
Nat

15
Karena ini adalah konvensi , saya pikir Anda dapat berhasil berpendapat bahwa kacang bisa menjadi POJO (misalnya Anda tidak mewarisi dari antarmuka JavaBean atau yang serupa)
Brian Agnew

1
JavaBeans spec gagal mendefinisikan JavaBean selain sangat longgar sebagai "komponen perangkat lunak yang dapat digunakan kembali" (atau semacamnya). Tidak harus memiliki konstruktor no-arg, tidak perlu metode yang dimulai dengan "get" atau "set", tidak perlu serial, bahkan tidak perlu kelas.
Tom Hawtin - tackline

4
Dalam istilah matematika, kita dapat mengatakan bahwa orang Jawa membentuk subset POJO, karena, kendala spesifik yang diletakkan pada POJO membuatnya menjadi bahasa Jawa.
Nishit

106

Semua JavaBeans adalah POJO tetapi tidak semua POJO adalah JavaBeans.

JavaBean adalah objek Java yang memenuhi konvensi pemrograman tertentu:

  • kelas JavaBean harus mengimplementasikan Serializable atau Externalizable;
  • kelas JavaBean harus memiliki konstruktor no-arg publik;
  • semua properti JavaBean harus memiliki metode setter dan pengambil publik (yang sesuai);
  • semua variabel instance JavaBean harus pribadi.

1
Saya pikir POJO tidak dapat diimplementasikan Serializable.
naXa

10
"kelas JavaBean harus memiliki konstruktor no-arg;" juga tambahkan publik di sini
radistao

JavaBean adalah serializable dan itulah sebabnya JavaBean BUKAN POJO.
karlihnos

25

Menurut Martin Fowler POJO adalah objek yang merangkum Business Logic sementara Bean (kecuali untuk definisi yang sudah dinyatakan dalam jawaban lain) sedikit lebih dari wadah untuk menyimpan data dan operasi yang tersedia pada objek hanya mengatur dan mendapatkan data.

Istilah ini diciptakan ketika Rebecca Parsons, Josh MacKenzie, dan saya sedang mempersiapkan sebuah ceramah di sebuah konferensi pada bulan September 2000. Dalam ceramah tersebut kami menunjukkan banyak manfaat dari pengodean logika bisnis ke objek java biasa daripada menggunakan Entity Beans. Kami bertanya-tanya mengapa orang begitu menentang menggunakan objek biasa dalam sistem mereka dan menyimpulkan bahwa itu karena objek sederhana tidak memiliki nama mewah. Jadi kami memberi mereka satu, dan itu ditangkap dengan sangat baik.

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


7

POJO: Jika kelas dapat dieksekusi dengan JDK yang mendasarinya, tanpa dukungan pihak ketiga eksternal perpustakaan lainnya yang disebut POJO

JavaBean: Jika kelas hanya berisi atribut dengan accessors (setter dan getter) itu disebut javabeans. Kacang jawa pada umumnya tidak akan mengandung logika bisnis daripada yang digunakan untuk menyimpan beberapa data di dalamnya.

Semua orang Jawa adalah POJO tetapi semua POJO bukan orang Jawa


7

Pojo - Obyek java tua polos

kelas pojo adalah kelas biasa tanpa spesialisasi, kelas benar-benar longgar ditambah dari teknologi / kerangka kerja. kelas tidak mengimplementasikan dari teknologi / kerangka kerja dan tidak meluas dari teknologi / kerangka api kelas yang disebut kelas pojo.

kelas pojo dapat mengimplementasikan antarmuka dan memperluas kelas tetapi kelas super atau antarmuka seharusnya tidak menjadi teknologi / kerangka kerja.

Contoh:

1.

class ABC{
----
}

Kelas ABC tidak menerapkan atau memperluas dari teknologi / kerangka kerja itu sebabnya ini adalah kelas pojo.

2.

class ABC extends HttpServlet{
---
}

Kelas ABC memanjang dari api teknologi servlet itu sebabnya ini bukan kelas pojo.

3.

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

Kelas ABC mengimplementasikan dari rmi api itu sebabnya ini bukan kelas pojo.

4.

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

antarmuka ini adalah bagian dari bahasa java bukan bagian dari teknologi / framework.so ini adalah kelas pojo.

5.

class ABC extends Thread{
--
}

di sini utas juga kelas bahasa java jadi ini juga kelas pojo.

6.

class ABC extends Test{
--
}

jika kelas Uji meluas atau mengimplementasikan dari teknologi / kerangka kerja maka ABC juga bukan kelas pojo karena mewarisi sifat-sifat kelas Uji. jika kelas Tes bukan kelas pojo maka kelas ABC juga bukan kelas pojo.

7.

sekarang titik ini merupakan kasus luar biasa

@Entity
class ABC{
--
}

@Entityadalah anotasi yang diberikan oleh hibernate api atau jpa api tetapi masih bisa kita sebut kelas ini sebagai kelas pojo. kelas dengan penjelasan yang diberikan dari teknologi / kerangka kerja disebut kelas pojo oleh kasus luar biasa ini.


2

Kacang Java adalah khusus jenis POJOs.

Spesialisasi tercantum di bawah ini dengan alasan

masukkan deskripsi gambar di sini


1

POJOSdengan konvensi tertentu (pengambil / penyetel, konstruktor tanpa argumen publik, variabel pribadi) dan sedang beraksi (mis. digunakan untuk membaca data dengan formulir) JAVABEANS.


1

Singkatnya: persamaan dan perbedaan adalah:

   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.

Semua Kacang JAVA adalah POJO tetapi tidak semua POJO adalah Kacang JAVA.


0

Anda telah melihat definisi formal di atas, semuanya berharga.

Tapi jangan terlalu terpaku pada definisi. Mari kita lihat lebih dalam lagi rasa hal-hal di sini.

JavaBeans digunakan dalam aplikasi Enterprise Java, di mana pengguna sering mengakses data dan / atau kode aplikasi dari jarak jauh, yaitu dari server (melalui web atau jaringan pribadi) melalui jaringan. Oleh karena itu data yang terlibat harus dialirkan dalam format serial ke dalam atau keluar dari komputer pengguna - karenanya kebutuhan objek Java EE untuk mengimplementasikan antarmuka Serializable. Sebanyak ini sifat JavaBean tidak berbeda dengan objek aplikasi Java SE yang datanya dibaca dari, atau ditulis, sistem file. Menggunakan kelas Java secara andal melalui jaringan dari berbagai kombinasi mesin pengguna / OS juga menuntut adopsi konvensi untuk penanganannya. Oleh karena itu persyaratan untuk menerapkan kelas-kelas ini sebagai publik, dengan atribut pribadi, konstruktor tanpa argumen dan getter dan setter standar.

Aplikasi Java EE juga akan menggunakan kelas selain yang diimplementasikan sebagai JavaBeans. Ini dapat digunakan dalam memproses data masukan atau mengatur data keluaran tetapi tidak akan digunakan untuk objek yang ditransfer melalui jaringan. Karenanya pertimbangan di atas tidak perlu diterapkan pada mereka bar yang valid sebagai objek Java. Kelas-kelas yang terakhir ini disebut sebagai POJOs - Plain Old Java Objects.

Secara keseluruhan, Anda bisa melihat Java Beans hanya sebagai objek Java yang diadaptasi untuk digunakan melalui jaringan.

Ada banyak sekali hype - dan tidak sedikit humbug - di dunia perangkat lunak sejak 1995.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.