Apache Commons BeanUtils

1. Oversigt

Apache Commons BeansUtils indeholder alle nødvendige værktøjer til at arbejde med Java bønner.

Kort sagt, en bønne er en simpel Java-klasse, der indeholder felter, getters / settere og en konstruktør uden argument.

Java giver reflektions- og introspektionsfunktioner til at identificere getter-setter-metoder og kalde dem dynamisk. Disse API'er kan dog være vanskelige at lære og kan kræve, at udviklere skriver kedelpladekode for at udføre de enkleste operationer.

2. Maven-afhængigheder

Her er Maven-afhængighed, der skal inkluderes i POM-filen, før du bruger den:

 commons-beanutils commons-beanutils 1.9.3 

Den nyeste version kan findes her.

3. Oprettelse af en Java Bean

Lad os oprette to bønneklasser Rute og Studerende med typiske getter- og settermetoder.

offentlig klasse Kursus {privat strengnavn; private listekoder; privat kort tilmeldtStudent = nyt HashMap (); // standard getters / setters} 
offentlig klasse studerende {privat strengnavn; // standard getters / setters}

Vi har en Rute klasse, der har et kursusnavn, kursuskoder og flere tilmeldte studerende. Tilmeldte studerende identificeres ved en unik tilmeldings-id. Rute klasse opretholder tilmeldte studerende i en Kort objekt, hvor tilmeldings-id er en nøgle, og elevobjektet er værdien.

4. Adgang til ejendom

Bønnegenskaber kan opdeles i tre kategorier.

4.1. Enkel ejendom

Enkeltværdige egenskaber kaldes også enkle eller skalære.

Deres værdi kan være en primitiv (såsom int, float) eller objekter af kompleks type. BeanUtils har en PropertyUtils klasse, der giver os mulighed for at ændre enkle egenskaber i en Java Bean.

Her er eksempelkoden for at indstille egenskaberne:

Kursuskursus = nyt kursus (); String name = "Computer Science"; Listekoder = Arrays.asList ("CS", "CS01"); PropertyUtils.setSimpleProperty (kursus, "navn", navn); PropertyUtils.setSimpleProperty (kursus, "koder", koder);

4.2. Indekseret ejendom

Indekserede egenskaber har en samling som en værdi, der kan tilgås individuelt ved hjælp af et indeksnummer. Som en udvidelse til JavaBean overvejer BeanUtils java.util.List skriv også værdier som indekseret.

Vi kan ændre en indekseret ejendoms individuel værdi ved hjælp af en PropertyUtilssetIndexedProperty metode.

Her er eksempelkode, der ændrer indekseret ejendom:

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

4.3. Kortlagt ejendom

Enhver ejendom, der har en java.util.Kort som den underliggende type kaldes en kortlagt egenskab. BeanUtils giver os mulighed for at opdatere den individuelle værdi på et kort ved hjælp af en Stringværdieret nøgle.

Her er eksempelkoden for at ændre værdien i en kortlagt egenskab:

Studerende = ny studerende (); String studentName = "Joe"; student.setnavn (studentnavn); PropertyUtils.setMappedProperty (kursus, "enrolledStudent (ST-1)", studerende);

5. Adgang til indlejret ejendom

Hvis en egenskabsværdi er et objekt, og vi har brug for at få adgang til en egenskabsværdi inde i det objekt - ville det være at få adgang til en indlejret ejendom. PropertyUtils give os adgang til og ændre indlejrede egenskaber såvel.

Antag, at vi ønsker at få adgang til navnegenskaben for Studerende klasse igennem Rute objekt. Vi skriver måske:

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

Vi kan få adgang til de indlejrede egenskabsværdier ved hjælp af getNestedProperty og ændre den indlejrede ejendom ved hjælp af setNestedProperty metoder i PropertyUtils. Her er koden:

Studerende studerende = ny studerende (); String studentName = "Joe"; student.setnavn (studentnavn); String nameValue = (String) PropertyUtils.getNestedProperty (kursus, "enrolledStudent (ST-1) .name");

6. Kopiér bønneegenskaber

Kopiering af egenskaber for et objekt til et andet objekt er ofte kedeligt og fejlbehæftet for udviklere. BeanUtils klasse giver en copyProperties metode, der kopierer egenskaberne for kildeobjekt til målobjekt hvor ejendomsnavnet er det samme i begge objekter.

Lad os oprette en anden bønneklasse som Rute vi oprettede ovenfor med samme egenskaber, bortset fra at det ikke vil have tilmeldtStudent ejendom i stedet for ejendomsnavn vil være studerende. Lad os navngive den klasse CourseEntity. Klassen ser ud som:

offentlig klasse CourseEntity {privat strengnavn; private listekoder; private kortstuderende = nye HashMap (); // standard getters / setters}

Nu kopierer vi egenskaberne af Rute protesterer mod CourseEnity objekt:

Kursuskursus = nyt kursus (); course.setName ("Computer Science"); course.setCodes (Arrays.asList ("CS")); course.setEnrolledStudent ("ST-1", ny studerende ()); CourseEntity courseEntity = ny CourseEntity (); BeanUtils.copyProperties (kursusEntitet, kursus);

Husk, at dette kun vil kopiere egenskaberne med samme navn. Derfor vil den ikke kopiere ejendommen tilmeldtStudent i Rute klasse, fordi der ikke er nogen ejendom med samme navn i CourseEntity klasse.

7. Konklusion

I denne hurtige artikel gik vi gennem de hjælpeklasser, der blev leveret af BeanUtils. Vi undersøgte også forskellige typer egenskaber, og hvordan kan vi få adgang til og ændre deres værdier.

Endelig så vi på at få adgang til indlejrede egenskabsværdier og kopiere egenskaber for et objekt til et andet objekt.

Selvfølgelig giver refleksions- og introspektionsfunktioner i Java SDK os også adgang til egenskaber dynamisk, men det kan være svært at lære og kræve noget kedelpladekode. BeanUtils giver os mulighed for at få adgang til og ændre disse værdier med et enkelt metodeopkald.

Kodestykker kan findes på GitHub.


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