Apa itu Kelas POJO?

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan menyiasat definisi "Objek Lama Old Java" atau POJO secara ringkas.

Kami akan melihat bagaimana POJO dibandingkan dengan JavaBean, dan bagaimana mengubah POJO kami menjadi JavaBeans dapat membantu.

2. Objek Jawa Lama yang Biasa

2.1. Apa itu POJO ?

Apabila kita membicarakan POJO, apa yang kita jelaskan adalah jenis mudah tanpa merujuk kepada kerangka kerja tertentu. POJO tidak mempunyai konvensyen penamaan untuk sifat dan kaedah kami.

Mari buat POJO pekerja asas. Ia akan mempunyai tiga sifat; nama depan, nama belakang, dan tarikh mula:

public class EmployeePojo { public String firstName; public String lastName; private LocalDate startDate; public EmployeePojo(String firstName, String lastName, LocalDate startDate) { this.firstName = firstName; this.lastName = lastName; this.startDate = startDate; } public String name() { return this.firstName + " " + this.lastName; } public LocalDate getStart() { return this.startDate; } }

Kelas ini dapat digunakan oleh program Java apa pun kerana tidak terikat dengan kerangka kerja apa pun.

Tetapi, kami tidak mengikuti konvensyen nyata untuk membina, mengakses, atau mengubah keadaan kelas.

Kekurangan konvensyen ini menyebabkan dua masalah:

Pertama, ia meningkatkan keluk pembelajaran bagi pengekod yang cuba memahami cara menggunakannya.

Kedua, ini dapat membatasi kemampuan kerangka kerja untuk memilih konvensi terhadap konfigurasi, memahami cara menggunakan kelas, dan meningkatkan fungsinya.

Untuk meneroka perkara kedua ini, mari bekerjasama dengan EmployeePojo menggunakan refleksi. Oleh itu, kita akan mula menemui beberapa batasannya.

2.2. Refleksi dengan POJO

Mari tambah ketergantungan commons-beanutils ke projek kami:

 commons-beanutils commons-beanutils 1.9.4 

Dan sekarang, mari kita periksa sifat POJO kami:

List propertyNames = PropertyUtils.getPropertyDescriptors(EmployeePojo.class).stream() .map(PropertyDescriptor::getDisplayName) .collect(Collectors.toList());

Jika kita mencetak propertyNames ke konsol, kami hanya dapat lihat:

[start] 

Di sini, kita melihat bahawa kita hanya memulakan sebagai harta kelas. PropertyUtils gagal menemui dua yang lain.

Kami akan melihat hasil yang sama seperti kami menggunakan perpustakaan lain seperti Jackson untuk memproses EmployeePojo.

Sebaik-baiknya, kami akan melihat semua sifat kami: firstName , lastName, dan startDate. Dan berita baiknya ialah banyak perpustakaan Java menyokong secara default sesuatu yang disebut konvensyen penamaan JavaBean.

3. JavaBeans

3.1. Apa itu JavaBean ?

JavaBean masih POJO tetapi memperkenalkan sekumpulan peraturan yang ketat tentang bagaimana kita menerapkannya:

  • Tahap akses - hartanah kami adalah peribadi dan kami mendedahkan penemu dan pengawal
  • Nama kaedah - pemula dan penyusun kami mengikuti konvensyen getX dan setX (dalam hal boolean, isX dapat digunakan untuk mendapatkan)
  • Default Constructor - konstruktor tanpa argumen mesti ada supaya instance dapat dibuat tanpa memberikan argumen, misalnya semasa deserialisasi
  • Serializable - melaksanakan antara muka Serializable membolehkan kita menyimpan keadaan

3.2. EmployeePojo sebagai JavaBean

Oleh itu, mari cuba menukar EmployeePojo menjadi JavaBean:

public class EmployeeBean implements Serializable { private static final long serialVersionUID = -3760445487636086034L; private String firstName; private String lastName; private LocalDate startDate; public EmployeeBean() { } public EmployeeBean(String firstName, String lastName, LocalDate startDate) { this.firstName = firstName; this.lastName = lastName; this.startDate = startDate; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } //  additional getters/setters }

3.3. Refleksi dengan JavaBean

Apabila kami memeriksa kacang kami dengan renungan, sekarang kami mendapat senarai penuh sifat:

[firstName, lastName, startDate]

4. Tradeoffs Semasa Menggunakan JavaBeans

Oleh itu, kami telah menunjukkan cara JavaBeans membantu. Perlu diingat bahawa setiap pilihan reka bentuk disertakan dengan pertukaran.

Semasa menggunakan JavaBeans, kita juga harus memperhatikan beberapa kelemahan yang mungkin berlaku:

  • Kebolehubahan - JavaBeans kami boleh berubah kerana kaedah setternya - ini boleh menyebabkan masalah bersamaan atau konsistensi
  • Boilerplate - kita mesti memperkenalkan pemenang untuk semua harta tanah dan setter untuk kebanyakan, kebanyakan ini mungkin tidak diperlukan
  • Konstruktor sifar-argumen - kita sering memerlukan argumen dalam konstruktor kita untuk memastikan objek itu disusun dalam keadaan yang sah, tetapi piawaian JavaBean menghendaki kita memberikan pembina argumen sifar

Memandangkan pertukaran ini, kerangka kerja juga telah disesuaikan dengan konvensi kacang lain selama bertahun-tahun.

5. Kesimpulan

Dalam tutorial ini, kami membandingkan POJO dengan JavaBeans.

Pertama, kami belajar POJO adalah objek Java yang tidak terikat dengan kerangka khusus, dan JavaBean adalah jenis POJO khas dengan sekumpulan konvensi yang ketat.

Kemudian, kami melihat bagaimana beberapa kerangka kerja dan perpustakaan memanfaatkan konvensyen penamaan JavaBean untuk mengetahui sifat kelas.

Seperti biasa, contohnya terdapat di GitHub.