Čo je to trieda POJO?

1. Prehľad

V tomto krátkom návode preskúmame definíciu „Obyčajného starého objektu Java“ alebo POJO v skratke.

Pozrime sa na to, ako je POJO v porovnaní s JavaBeanom, a ako môže byť užitočné zmeniť naše POJO na JavaBeans.

2. Obyčajné staré objekty Java

2.1. Čo je a POJO?

Keď hovoríme o POJO, popisujeme priamy typ bez odkazov na konkrétne rámce. POJO nemá pomenovaciu konvenciu pre naše vlastnosti a metódy.

Vytvorme základného zamestnanca POJO. Bude mať tri vlastnosti; meno, priezvisko a dátum začatia:

verejná trieda EmployeePojo {public String firstName; verejný reťazec priezvisko; private LocalDate startDate; public EmployeePojo (reťazec krstné meno, reťazec priezvisko, LocalDate dátum začiatku) {this.firstName = meno; this.lastName = priezvisko; this.startDate = startDate; } public String name () {return this.firstName + "" + this.lastName; } public LocalDate getStart () {return this.startDate; }}

Túto triedu môže používať akýkoľvek program Java, pretože nie je viazaná na žiadny rámec.

Nesledujeme však nijaký skutočný dohovor o konštrukcii, prístupe alebo úprave stavu triedy.

Tento nedostatok konvencie spôsobuje dva problémy:

Najskôr zvyšuje krivku učenia sa kódovačov, ktorí sa snažia pochopiť, ako ich používať.

Po druhé, môže to obmedziť schopnosť rámca uprednostňovať konvencie pred konfiguráciou, pochopiť, ako používať triedu, a rozšíriť jej funkčnosť.

Aby sme preskúmali tento druhý bod, poďme spolu pracovať EmployeePojo pomocou odrazu. Začneme teda hľadať niektoré z jeho obmedzení.

2.2. Odraz pomocou POJO

Pridajme commons-beanutils závislosť do nášho projektu:

 commons-beanutils commons-beanutils 1.9.4 

A teraz poďme skontrolovať vlastnosti nášho POJO:

Zoznam propertyNames = PropertyUtils.getPropertyDescriptors (EmployeePojo.class) .stream () .map (PropertyDescriptor :: getDisplayName) .collect (Collectors.toList ());

Keby sme mali tlačiť názvy nehnuteľností na konzolu, videli by sme iba:

[štart] 

Tu vidíme, že iba dostávame začať ako majetok triedy. PropertyUtils sa nepodarilo nájsť ďalších dvoch.

Rovnakého výsledku by sme sa dočkali, keby sme na spracovanie použili ďalšie knižnice, ako je Jackson EmployeePojo.

V ideálnom prípade by sme videli všetky naše vlastnosti: krstné meno, priezvisko, a dátum začiatku. A dobrou správou je, že veľa knižníc Java štandardne podporuje niečo, čo sa nazýva konvencia pomenovania JavaBean.

3. JavaBeans

3.1. Čo je a JavaBean?

JavaBean je stále POJO, ale zavádza prísny súbor pravidiel týkajúcich sa jeho implementácie:

  • Úrovne prístupu - naše nehnuteľnosti sú súkromné ​​a vystavujeme getry a settery
  • Názvy metód - naši zakladatelia a zakladatelia sa riadia znakmi getX a setX dohovor (v prípade booleovského, isX môžu byť použité pre getter)
  • Predvolený konštruktor - musí byť prítomný konštruktor bez argumentov, aby bolo možné vytvoriť inštanciu bez poskytnutia argumentov, napríklad počas deserializácie.
  • Serializable - implementácia Serializovateľné rozhranie nám umožňuje uložiť stav

3.2. EmployeePojo ako JavaBean

Skúsme teda prevádzať EmployeePojo do JavaBean:

verejná trieda EmployeeBean implementuje Serializable {private static final long serialVersionUID = -3760445487636086034L; private String meno; private String priezvisko; private LocalDate startDate; public EmployeeBean () {} public EmployeeBean (String firstName, String lastName, LocalDate startDate) {this.firstName = firstName; this.lastName = priezvisko; this.startDate = startDate; } public String getFirstName () {return meno; } public void setFirstName (reťazec firstName) {this.firstName = firstName; } // ďalší zakladatelia / zakladatelia}

3.3. Odraz pomocou JavaBean

Keď skontrolujeme svoju fazuľu s odrazom, získame teraz úplný zoznam vlastností:

[meno, priezvisko, dátum začiatku]

4. Kompromisy pri používaní JavaBeans

Takže sme ukázali spôsob, akým sú JavaBeans užitočné. Majte na pamäti, že každá voľba dizajnu prichádza s kompromismi.

Keď používame JavaBeans, mali by sme pamätať aj na niektoré potenciálne nevýhody:

  • Premenlivosť - naše JavaBeans sú premenlivé vďaka svojim metódam nastavenia - to by mohlo viesť k problémom so súbežnosťou alebo konzistenciou
  • Varná doska - pre väčšinu nehnuteľností musíme predstaviť getry a pre väčšinu z nich nastavovače, veľa z toho môže byť zbytočné
  • Konštruktor s nulovým argumentom - v našich konštruktoroch často potrebujeme argumenty, aby sme zaistili inštanciu objektu v platnom stave, ale štandard JavaBean vyžaduje, aby sme poskytli konštruktor s nulovým argumentom

Na základe týchto kompromisov sa rámce v priebehu rokov prispôsobili aj iným konvenciám fazule.

5. Záver

V tomto tutoriáli sme porovnávali POJO s JavaBeans.

Najprv sme sa dozvedeli, že POJO je objekt Java, ktorý nie je viazaný na žiadny konkrétny rámec, a že JavaBean je špeciálny typ POJO s prísnou sadou konvencií.

Potom sme videli, ako niektoré rámce a knižnice využívajú konvenciu pomenovania JavaBean na zisťovanie vlastností triedy.

Ako obvykle sú príklady k dispozícii na GitHub.