Apache Commons BeanUtils

1. Ikhtisar

Apache Commons BeansUtils berisi semua alat yang diperlukan untuk bekerja dengan kacang Java.

Sederhananya, bean adalah kelas Java sederhana yang berisi field, getter / setter, dan konstruktor tanpa argumen.

Java menyediakan kemampuan refleksi dan introspeksi untuk mengidentifikasi metode pengambil-penyetel dan memanggilnya secara dinamis. Namun, API ini mungkin sulit dipelajari dan mungkin mengharuskan pengembang untuk menulis kode boilerplate untuk melakukan operasi yang paling sederhana.

2. Ketergantungan Maven

Berikut adalah ketergantungan Maven yang perlu dimasukkan ke dalam file POM sebelum menggunakannya:

 commons-beanutils commons-beanutils 1.9.3 

Versi terbaru dapat ditemukan di sini.

3. Membuat Java Bean

Mari buat dua kelas kacang, Course dan Student dengan metode pengambil dan penyetel yang khas.

public class Course { private String name; private List codes; private Map enrolledStudent = new HashMap(); // standard getters/setters } 
public class Student { private String name; // standard getters/setters }

Kami memiliki kelas Kursus yang memiliki nama kursus, kode kursus, dan beberapa siswa yang terdaftar. Siswa yang Terdaftar diidentifikasi dengan ID pendaftaran unik. Kelas kursus mempertahankan siswa yang terdaftar dalam objek Peta di mana ID pendaftaran adalah kuncinya, dan objek siswa akan menjadi nilainya.

4. Akses Properti

Properti kacang dapat dibagi menjadi tiga kategori.

4.1. Properti Sederhana

Properti bernilai tunggal juga disebut sederhana atau skalar.

Nilainya mungkin objek tipe primitif (seperti int, float) atau kompleks. BeanUtils memiliki kelas PropertyUtils yang memungkinkan kita untuk memodifikasi properti sederhana di Java Bean.

Berikut adalah contoh kode untuk mengatur properti:

Course course = new Course(); String name = "Computer Science"; List codes = Arrays.asList("CS", "CS01"); PropertyUtils.setSimpleProperty(course, "name", name); PropertyUtils.setSimpleProperty(course, "codes", codes);

4.2. Properti Terindeks

Properti yang diindeks memiliki kumpulan sebagai nilai yang dapat diakses secara individual menggunakan nomor indeks. Sebagai ekstensi untuk JavaBean, BeanUtils menganggap nilai jenis java.util.List juga diindeks.

Kita dapat mengubah nilai individu properti terindeks menggunakan metode setIndexedProperty dari PropertyUtils .

Berikut adalah contoh kode yang mengubah properti terindeks:

PropertyUtils.setIndexedProperty(course, "codes[1]", "CS02");

4.3. Properti yang Dipetakan

Semua properti yang memiliki java.util.Map sebagai tipe dasarnya disebut properti yang dipetakan. BeanUtils memungkinkan kita untuk memperbarui nilai individu dalam peta menggunakan kunci bernilai String .

Berikut adalah contoh kode untuk mengubah nilai dalam properti yang dipetakan:

Student student = new Student(); String studentName = "Joe"; student.setName(studentName); PropertyUtils.setMappedProperty(course, "enrolledStudent(ST-1)", student);

5. Akses Properti Bersarang

Jika nilai properti adalah sebuah objek dan kita perlu mengakses nilai properti di dalam objek itu - itu akan mengakses properti bersarang. PropertyUtils memungkinkan kita untuk mengakses dan memodifikasi properti bersarang juga.

Asumsikan kita ingin mengakses properti name class Student melalui objek Course . Kami mungkin menulis:

String name = course.getEnrolledStudent("ST-1").getName();

Kita bisa mengakses nilai properti bersarang menggunakan getNestedProperty dan mengubah properti bersarang menggunakan metode setNestedProperty di PropertyUtils . Ini kodenya:

Student student = new Student(); String studentName = "Joe"; student.setName(studentName); String nameValue = (String) PropertyUtils.getNestedProperty( course, "enrolledStudent(ST-1).name");

6. Salin Properti Bean

Menyalin properti dari satu objek ke objek lain seringkali membosankan dan rawan kesalahan bagi pengembang. Kelas BeanUtils menyediakan metode copyProperties yang menyalin properti objek sumber ke objek target yang nama propertinya sama di kedua objek.

Mari kita buat kelas kacang lain seperti Kursus yang kita buat di atas dengan properti yang sama kecuali itu tidak akan memiliki properti terdaftarStudent sebagai gantinya nama properti akan menjadi siswa . Mari beri nama kelas itu CourseEntity . Kelasnya akan terlihat seperti:

public class CourseEntity { private String name; private List codes; private Map students = new HashMap(); // standard getters/setters }

Sekarang kita akan menyalin properti objek Course ke objek CourseEntity :

Course course = new Course(); course.setName("Computer Science"); course.setCodes(Arrays.asList("CS")); course.setEnrolledStudent("ST-1", new Student()); CourseEntity courseEntity = new CourseEntity(); BeanUtils.copyProperties(courseEntity, course);

Ingat ini hanya akan menyalin properti dengan nama yang sama. Oleh karena itu, ini tidak akan menyalin properti terdaftaredStudent di kelas Kursus karena tidak ada properti dengan nama yang sama di kelas CourseEntity .

7. Kesimpulan

Dalam artikel singkat ini, kami membahas kelas utilitas yang disediakan oleh BeanUtils . Kami juga melihat berbagai jenis properti dan bagaimana kami dapat mengakses dan mengubah nilainya.

Akhirnya, kami melihat ke dalam mengakses nilai properti bersarang dan menyalin properti dari satu objek ke objek lain.

Tentu saja, kemampuan refleksi dan introspeksi di Java SDK juga memungkinkan kita mengakses properti secara dinamis, tetapi sulit untuk dipelajari dan memerlukan beberapa kode boilerplate. BeanUtils memungkinkan kita untuk mengakses dan memodifikasi nilai-nilai ini dengan satu panggilan metode.

Potongan kode dapat ditemukan di GitHub.