Apache Commons BeanUtils

1. Oversikt

Apache Commons BeansUtils inneholder alle verktøyene som er nødvendige for å jobbe med Java-bønner.

Enkelt sagt, en bønne er enkle Java-klasser som inneholder felt, getters / setters, og ingen argumentkonstruktør.

Java tilbyr refleksjon og introspeksjonsfunksjoner for å identifisere getter-setter-metoder og kalle dem dynamisk. Imidlertid kan disse API-ene være vanskelige å lære, og kan kreve at utviklere skriver kjelekode for å utføre de enkleste operasjonene.

2. Maven-avhengigheter

Her er Maven avhengighet må inkluderes i POM-filen før du bruker den:

 commons-beanutils commons-beanutils 1.9.3 

Den nyeste versjonen finner du her.

3. Opprette en Java Bean

La oss lage to bønneklasser Kurs og Student med typiske getter- og settermetoder.

offentlig klasse Kurs {privat strengnavn; private Listekoder; privat kart EncrolledStudent = nytt HashMap (); // standard getters / setters} 
offentlig klasse Student {privat Strengnavn; // standard getters / setters}

Vi har en Kurs klasse som har kursnavn, kurskoder og flere påmeldte studenter. Påmeldte studenter identifiseres av unik registrerings-ID. Kurs klasse opprettholder påmeldte studenter i en Kart objekt der registrerings-ID er en nøkkel, og studentobjektet vil være verdien.

4. Tilgang til eiendom

Bønneegenskaper kan deles inn i tre kategorier.

4.1. Enkel eiendom

Enverdiegenskaper kalles også enkle eller skalære.

Verdien deres kan være primitive (som int, float) eller komplekse objekter. BeanUtils har en PropertyUtils klasse som lar oss endre enkle egenskaper i en Java Bean.

Her er eksempelkoden for å angi egenskapene:

Kurskurs = nytt Kurs (); Strengnavn = "Informatikk"; Listekoder = Arrays.asList ("CS", "CS01"); PropertyUtils.setSimpleProperty (kurs, "navn", navn); PropertyUtils.setSimpleProperty (kurs, "koder", koder);

4.2. Indeksert eiendom

Indekserte egenskaper har en samling som en verdi som kan åpnes individuelt ved hjelp av et indeksnummer. Som en utvidelse av JavaBean, vurderer BeanUtils java.util.Liste skriv verdier som indeksert også.

Vi kan endre en indeksert eiendoms individuell verdi ved hjelp av a PropertyUtilssetIndexedProperty metode.

Her er eksempelkode som endrer indeksert eiendom:

PropertyUtils.setIndexedProperty (kurs, "koder [1]", "CS02");

4.3. Kartlagt eiendom

Enhver eiendom som har en java.util.Kart som den underliggende typen kalles en kartlagt eiendom. BeanUtils lar oss oppdatere den enkelte verdien på et kart ved hjelp av a Stringverdi nøkkel.

Her er eksempelkoden for å endre verdien i en tilordnet eiendom:

Studentstudent = ny student (); String studentName = "Joe"; student.setName (studentnavn); PropertyUtils.setMappedProperty (kurs, "enrolledStudent (ST-1)", student);

5. Tilgang til nestet eiendom

Hvis en eiendomsverdi er et objekt, og vi trenger tilgang til en eiendomsverdi i det objektet - vil det være tilgang til en nestet eiendom. PropertyUtils la oss få tilgang til og endre nestede egenskaper også.

Anta at vi vil ha tilgang til navnegenskapen til Student klasse gjennom Kurs gjenstand. Vi kan skrive:

Strengnavn = kurs.getEnrolledStudent ("ST-1"). GetName ();

Vi kan få tilgang til de nestede eiendomsverdiene ved hjelp av getNestedProperty og endre den nestede egenskapen ved hjelp av setNestedProperty metoder i PropertyUtils. Her er koden:

Studentstudent = ny student (); String studentName = "Joe"; student.setName (studentnavn); String nameValue = (String) PropertyUtils.getNestedProperty (kurs, "enrolledStudent (ST-1) .name");

6. Kopier bønneegenskaper

Å kopiere egenskaper til et objekt til et annet objekt er ofte kjedelig og feilutsatt for utviklere. BeanUtils klasse gir en copyProperties metode som kopierer egenskapene til kildeobjektet til målobjektet der eiendomsnavnet er det samme i begge objektene.

La oss lage en ny bønneklasse som Kurs vi opprettet ovenfor med samme egenskaper, bortsett fra at den ikke vil ha registrertStudent eiendom i stedet vil eiendomsnavnet være studenter. La oss kalle den klassen CourseEntity. Klassen ser ut som:

offentlig klasse CourseEntity {private strengnavn; private Listekoder; private Map-studenter = nye HashMap (); // standard getters / setters}

Nå skal vi kopiere egenskapene til Kurs ha innvendinger CourseEntity gjenstand:

Kurskurs = nytt Kurs (); course.setName ("Informatikk"); course.setCodes (Arrays.asList ("CS")); kurs.setEnrolledStudent ("ST-1", ny student ()); CourseEntity courseEntity = ny CourseEntity (); BeanUtils.copyProperties (kursEntitet, kurs);

Husk at dette bare vil kopiere egenskapene med samme navn. Derfor vil den ikke kopiere eiendommen registrertStudent i Kurs klasse fordi det ikke er noen eiendom med samme navn i CourseEntity klasse.

7. Konklusjon

I denne raske artikkelen gikk vi over hjelpeklasser gitt av BeanUtils. Vi så også på forskjellige typer eiendommer og hvordan kan vi få tilgang til og endre verdiene deres.

Til slutt så vi på å få tilgang til nestede eiendomsverdier og kopiere egenskaper til et objekt til et annet objekt.

Selvfølgelig gir refleksjon og introspeksjonsfunksjoner i Java SDK oss også tilgang til egenskaper dynamisk, men det kan være vanskelig å lære og kreve noe kokerplatekode. BeanUtils lar oss få tilgang til og endre disse verdiene med en enkeltmetodesamtale.

Kodebiter finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found