Č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.