Apache Commons BeanUtils

1. Pregled

Apache Commons BeansUtils sadrži sve alate potrebne za rad s Java grahom.

Jednostavno rečeno, bean je jednostavna Java klasa koja sadrži polja, getere / postavljače i konstruktor bez argumenata.

Java pruža mogućnosti refleksije i introspekcije za identificiranje metoda dobivača-postavljača i njihovo dinamičko pozivanje. Međutim, ove API-je može biti teško naučiti i mogu zahtijevati od programera da napišu šifru za izvršavanje najjednostavnijih operacija.

2. Ovisnosti Mavena

Evo ovisnosti o Mavenu koju treba uključiti u POM datoteku prije nego što je upotrijebite:

 commons-beanutils zajednički-beanutils 1.9.3 

Najnoviju verziju možete pronaći ovdje.

3. Izrada Java Bean-a

Stvorimo dvije klase graha Tečaj i Student s tipičnim metodama getera i setera.

javni tečaj {privatni naziv niza; privatni kodovi s popisa; privatna karta enrollStudent = novi HashMap (); // standardni getteri / postavljači} 
student javnog razreda {naziv privatnog niza; // standardni getteri / postavljači}

Imamo Tečaj razred koji ima naziv predmeta, šifre predmeta i više upisanih studenata. Upisani studenti identificirani su jedinstvenim ID-om upisa. Tečaj razred održava upisane studente u a Karta objekt gdje je ID upisa ključ, a studentski objekt bit će vrijednost.

4. Pristup nekretnini

Svojstva graha mogu se podijeliti u tri kategorije.

4.1. Jednostavno svojstvo

Svojstva s jednom vrijednošću nazivaju se i jednostavnim ili skalarnim.

Njihova vrijednost može biti primitivan (poput int, float) ili složeni tip objekata. BeanUtils ima PropertyUtils klasa koja nam omogućuje izmjenu jednostavnih svojstava u Java Beanu.

Evo primjera koda za postavljanje svojstava:

Tečaj tečaja = novi tečaj (); Naziv niza = "Računalne znanosti"; Kodovi popisa = Arrays.asList ("CS", "CS01"); PropertyUtils.setSimpleProperty (tečaj, "ime", ime); PropertyUtils.setSimpleProperty (tečaj, "kodovi", kodovi);

4.2. Indeksirana imovina

Indeksirana svojstva imaju zbirku kao vrijednost kojoj se može pojedinačno pristupiti pomoću indeksnog broja. Kao proširenje JavaBean-a, BeanUtils smatra java.util.Popis vrste vrijednosti kao i indeksirane.

Možemo izmijeniti pojedinačnu vrijednost indeksiranog svojstva pomoću a PropertyUtils'ssetIndexedProperty metoda.

Evo primjera koda koji mijenja indeksirano svojstvo:

PropertyUtils.setIndexedProperty (tečaj, "kodovi [1]", "CS02");

4.3. Mapirana imovina

Bilo koje svojstvo koje ima java.util.Map kao što se osnovni tip naziva mapirano svojstvo. BeanUtils nam omogućuje ažuriranje pojedinačne vrijednosti na karti pomoću a String-cijenjeno ključ.

Evo primjera koda za izmjenu vrijednosti u mapiranom svojstvu:

Student student = novi Student (); Niz studentName = "Joe"; student.setName (studentName); PropertyUtils.setMappedProperty (tečaj, "enrollStudent (ST-1)", student);

5. Pristup ugniježđenom vlasništvu

Ako je vrijednost svojstva objekt i trebamo pristupiti vrijednosti svojstva unutar tog objekta - to bi bio pristup ugniježđenom svojstvu. PropertyUtils dopustite nam pristup i izmijeniti ugniježđena svojstva također.

Pretpostavimo da želimo pristupiti svojstvu imena Student razred kroz Tečaj objekt. Mogli bismo napisati:

Naziv niza = course.getEnrollStudent ("ST-1"). GetName ();

Vrijednostima ugniježđenih svojstava možemo pristupiti pomoću getNestedProperty i izmijenite ugniježđeno svojstvo pomoću setNestedProperty metode u PropertyUtils. Evo koda:

Student student = novi Student (); Niz studentName = "Joe"; student.setName (studentName); String nameValue = (String) PropertyUtils.getNestedProperty (tečaj, "enrollStudent (ST-1) .name");

6. Kopirajte svojstva graha

Kopiranje svojstava jednog objekta u drugi objekt programerima je često zamorno i sklono pogreškama. BeanUtils razred pruža a copyProperties metoda koja kopira svojstva izvornog objekta u ciljni objekt gdje je ime svojstva isto u oba objekta.

Stvorimo još jedan razred graha kao Tečaj stvorili smo gore s istim svojstvima, osim što ih neće imati upisaoStudent svojstvo umjesto toga ime svojstva će biti studenti. Nazovimo taj razred CourseEntity. Predavanje bi izgledalo ovako:

javna klasa CourseEntity {naziv privatnog niza; privatni kodovi s popisa; studenti na privatnoj mapi = novi HashMap (); // standardni getteri / postavljači}

Sada ćemo kopirati svojstva Tečaj prigovoriti CourseEntity objekt:

Tečaj tečaja = novi tečaj (); course.setName ("Računalne znanosti"); course.setCodes (Arrays.asList ("CS")); course.setEnrollStudent ("ST-1", novi Student ()); CourseEntity courseEntity = novi CourseEntity (); BeanUtils.copyProperties (courseEntity, course);

Ne zaboravite da će se kopirati samo svojstva s istim imenom. Stoga neće kopirati imovinu upisaoStudent u Tečaj razreda jer u. nema imovine s istim imenom CourseEntity razred.

7. Zaključak

U ovom smo kratkom članku pregledali klase uslužnih programa koje nudi BeanUtils. Također smo proučavali različite vrste svojstava i kako možemo pristupiti i izmijeniti njihove vrijednosti.

Konačno, ispitali smo pristup ugniježđenim vrijednostima svojstava i kopiranje svojstava jednog objekta u drugi objekt.

Naravno, mogućnosti refleksije i introspekcije u Java SDK-u također nam omogućuju dinamički pristup svojstvima, ali može biti teško naučiti i zahtijevati neki standardni obrazac. BeanUtils omogućuje nam pristup i izmjenu ovih vrijednosti jednim pozivom metode.

Isječke koda možete pronaći na GitHubu.