Apache Commons BeanUtils

1. Prehľad

Apache Commons BeansUtils obsahuje všetky nástroje potrebné na prácu s fazuľami Java.

Zjednodušene povedané, fazuľa je jednoduchá Java trieda obsahujúca polia, getry / setre a konštruktor bez argumentov.

Java poskytuje schopnosti reflexie a introspekcie na identifikáciu metód getra-setra a ich dynamické volanie. Avšak tieto API sa dá ťažko naučiť a môžu vyžadovať, aby vývojári napísali štandardný kód na vykonávanie najjednoduchších operácií.

2. Maven závislosti

Tu je závislosť Maven, ktorú je potrebné zahrnúť do súboru POM pred použitím:

 commons-beanutils commons-beanutils 1.9.3 

Najnovšiu verziu nájdete tu.

3. Vytvorenie Java Bean

Vytvorme dve triedy fazule Samozrejme a Študent typickými metódami getra a setra.

public class Course {private String name; kódy súkromného zoznamu; private Map enrolledStudent = new HashMap (); // štandardné getre / settery} 
public class Student {private String name; // štandardné getre / settery}

Máme Samozrejme trieda, ktorá má názov kurzu, kódy kurzov a viac zapísaných študentov. Zapísaní študenti sú identifikovaní jedinečným ID registrácie. Samozrejme trieda udržiava zapísaných študentov v a Mapa objekt, kde ID registrácie je kľúč, a študentovým objektom bude hodnota.

4. Prístup k majetku

Vlastnosti fazule možno rozdeliť do troch kategórií.

4.1. Jednoduchá vlastnosť

Vlastnosti jednej hodnoty sa tiež nazývajú jednoduché alebo skalárne.

Ich hodnotou môže byť primitívny objekt (napríklad int, float) alebo objekty zložitého typu. BeanUtils má a PropertyUtils trieda, ktorá nám umožňuje upravovať jednoduché vlastnosti v Java Bean.

Tu je príklad kódu na nastavenie vlastností:

Kurz kurzu = nový Kurz (); Názov reťazca = "Informatika"; Zoznam kódov = Arrays.asList ("CS", "CS01"); PropertyUtils.setSimpleProperty (kurz, "meno", meno); PropertyUtils.setSimpleProperty (kurz, "kódy", kódy);

4.2. Indexovaná vlastnosť

Indexované vlastnosti majú kolekciu ako hodnotu, ku ktorej je možné individuálne pristupovať pomocou indexového čísla. Za rozšírenie JavaBean považuje BeanUtils java.util.List zadajte aj indexované hodnoty.

Môžeme upraviť individuálnu hodnotu indexovanej vlastnosti pomocou a PropertyUtilssetIndexedProperty metóda.

Tu je príklad kódu upravujúceho indexovanú vlastnosť:

PropertyUtils.setIndexedProperty (kurz, "kódy [1]", "CS02");

4.3. Mapované vlastníctvo

Akákoľvek nehnuteľnosť, ktorá má a java.util.Map ako podkladový typ sa nazýva mapovaná vlastnosť. BeanUtils nám umožňuje aktualizovať individuálnu hodnotu na mape pomocou a Sláčikové kľúč.

Tu je príklad kódu na úpravu hodnoty v mapovanej vlastnosti:

Študent študent = nový Študent (); Reťazec studentName = "Joe"; student.setName (studentName); PropertyUtils.setMappedProperty (kurz, "enrolledStudent (ST-1)", študent);

5. Vnorený majetok

Ak je hodnotou vlastnosti objekt a musíme získať prístup k hodnote vlastnosti vo vnútri tohto objektu - to by bol prístup k vnorenej vlastnosti. PropertyUtils umožniť nám prístup a upraviť vnorené vlastnosti tiež.

Predpokladajme, že chceme získať prístup k vlastnosti name Študent trieda cez Samozrejme objekt. Mohli by sme napísať:

Názov reťazca = course.getEnrolledStudent ("ST-1"). GetName ();

K vnoreným hodnotám vlastností môžeme pristupovať pomocou getNestedProperty a upravte vnorenú vlastnosť pomocou setNestedProperty metódy v PropertyUtils. Tu je kód:

Študent študent = nový Študent (); Reťazec studentName = "Joe"; student.setName (studentName); String nameValue = (String) PropertyUtils.getNestedProperty (kurz, "enrolledStudent (ST-1) .name");

6. Skopírujte vlastnosti fazule

Kopírovanie vlastností jedného objektu do druhého je pre vývojárov často zdĺhavé a náchylné na chyby. BeanUtils trieda poskytuje a copyProperties metóda, ktorá kopíruje vlastnosti zdrojového objektu do cieľového objektu kde je názov vlastnosti v oboch objektoch rovnaký.

Vytvorme ďalšiu triedu fazule ako Samozrejme vyššie sme vytvorili s rovnakými vlastnosťami, ibaže nebude mať zapísanýŠtudent namiesto názvu vlastnosti bude študentov. Poďme pomenovať túto triedu CourseEntity. Trieda by vyzerala takto:

public class CourseEntity {private String name; kódy súkromného zoznamu; študenti súkromnej mapy = nový HashMap (); // štandardné getre / settery}

Teraz skopírujeme vlastnosti Samozrejme namietať proti CourseEntity objekt:

Kurz kurzu = nový Kurz (); course.setName ("Informatika"); course.setCodes (Arrays.asList ("CS")); course.setEnrolledStudent ("ST-1", nový študent ()); CourseEntity courseEntity = nový CourseEntity (); BeanUtils.copyProperties (courseEntity, course);

Pamätajte, že to skopíruje vlastnosti iba s rovnakým názvom. Preto nebude kopírovať nehnuteľnosť zapísanýŠtudent v Samozrejme triedy, pretože v priečinku nie je žiadna nehnuteľnosť s rovnakým názvom CourseEntity trieda.

7. Záver

V tomto rýchlom článku sme si prešli triedy pomôcok poskytované programom BeanUtils. Pozreli sme sa tiež na rôzne typy vlastností a na to, ako môžeme získať prístup a upraviť ich hodnoty.

Nakoniec sme sa pozreli na prístup k vnoreným hodnotám vlastností a kopírovanie vlastností jedného objektu do druhého.

Schopnosti reflexie a introspekcie v súprave Java SDK nám samozrejme umožňujú dynamický prístup k vlastnostiam, ale môže byť ťažké sa ich naučiť a vyžadovať určitý štandardný kód. BeanUtils nám umožňuje prístup k týmto hodnotám a ich úpravu jediným volaním metódy.

Útržky kódu nájdete na GitHub.


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