Mi az a POJO osztály?

1. Áttekintés

Ebben a rövid bemutatóban megvizsgáljuk a „Plain Old Java Object” definícióját vagy röviden POJO.

Megvizsgáljuk, hogy a POJO hogyan viszonyul a JavaBean-hoz, és hogyan lehet hasznos a POJO-k JavaBean-vá alakítása.

2. Egyszerű régi Java objektumok

2.1. Mi az a POJO?

Amikor POJO-ról beszélünk, az általunk leírtak egyenes típusúak, semmilyen konkrét keretrendszerre nem hivatkozva. A POJO-nak nincs elnevezési szokása tulajdonságainkra és módszereinkre.

Hozzunk létre egy alap alkalmazott POJO-t. Három tulajdonsággal rendelkezik; keresztnév, vezetéknév és kezdő dátum:

public class EmployeePojo {public String keresztnév; public String vezetéknév; privát LocalDate startDate; public EmployeePojo (String keresztnév, String vezetéknév, LocalDate startDate) {this.firstName = keresztnév; this.lastName = vezetékNév; this.startDate = startDate; } public String name () {return this.firstName + "" + this.lastName; } public LocalDate getStart () {return this.startDate; }}

Ezt az osztályt bármely Java program használhatja, mivel nincs kötve egyetlen keretrendszerhez sem.

De nem követünk semmilyen valós megállapodást az osztály állapotának összeállításáról, eléréséről vagy módosításáról.

A konvenció hiánya két problémát okoz:

Először is, növeli a kódolók tanulási görbéjét, akik megpróbálják megérteni annak használatát.

Második, korlátozhatja a keretrendszer azon képességét, hogy előnyben részesítse a konvenciót a konfigurációval szemben, megértse, hogyan kell használni az osztályt, és bővíti annak funkcionalitását.

A második pont felfedezéséhez dolgozzunk együtt EmployeePojo reflexió segítségével. Így kezdjük megtalálni néhány korlátját.

2.2. Reflektálás POJO-val

Tegyük hozzá a közönséges-beanutil függőség projektünkhöz:

 commons-beanutils commons-beanutils 1.9.4 

Most pedig vizsgáljuk meg a POJO tulajdonságait:

List tulajdonságNév = PropertyUtils.getPropertyDescriptors (EmployeePojo.class) .stream () .map (PropertyDescriptor :: getDisplayName) .collect (Collectors.toList ());

Ha kinyomtatnánk propertyNames a konzolhoz csak a következőket láttuk:

[Rajt] 

Itt látjuk, hogy csak kapunk Rajt mint az osztály tulajdonsága. PropertyUtils nem találta a másik kettőt.

Ugyanilyen eredményt látnánk, ha más könyvtárakat is használnánk, mint például Jackson a feldolgozáshoz EmployeePojo.

Ideális esetben megnéznénk az összes tulajdonságunkat: keresztnév, vezetéknév, és kezdő dátum. És jó hír, hogy sok Java könyvtár alapértelmezés szerint támogat valamit, az úgynevezett JavaBean elnevezési megállapodást.

3. JavaBeans

3.1. Mi az a JavaBean?

A JavaBean még mindig POJO, de szigorú szabályrendszert vezet be annak végrehajtására vonatkozóan:

  • Hozzáférési szintek - ingatlanjaink magántulajdonban vannak, és kitesszük a gettereket és a beállítókat
  • Metódusnevek - a gettereink és beállítóink követik a getX és setX egyezmény (logikai érték esetén isX lehet használni a getter)
  • Alapértelmezett konstruktor - egy argumentum nélküli konstruktornak jelen kell lennie, így egy példány argumentumok megadása nélkül is létrehozható, például deserializáció során
  • Serializálható - a Sorosítható felület lehetővé teszi számunkra az állapot tárolását

3.2. EmployeePojo mint JavaBean

Tehát próbáljuk meg az átalakítást EmployeePojo JavaBean-ba:

public class EmployeeBean megvalósítja a Serializable {private static final long serialVersionUID = -3760445487636086034L; privát karakterlánc keresztnév; privát karakterlánc vezetéknév; privát LocalDate startDate; public EmployeeBean () {} public EmployeeBean (String keresztnév, String vezetéknév, LocalDate startDate) {this.firstName = keresztnév; this.lastName = vezetékNév; this.startDate = startDate; } public karakterlánc getFirstName () {return firstName; } public void setFirstName (String keresztnév) {this.firstName = keresztnév; } // további getterek / beállítók}

3.3. Tükrözés JavaBean-nal

Amikor reflexióval megvizsgáljuk a babunkat, most megkapjuk a tulajdonságok teljes listáját:

[keresztnév, vezetéknév, kezdési dátum]

4. Kompromisszumok a JavaBeans használatakor

Tehát bemutattuk a JavaBeans hasznos módját. Ne feledje, hogy minden tervezési választás kompromisszumokkal jár.

A JavaBeans használatakor figyelembe kell venni néhány lehetséges hátrányt is:

  • Változtathatóság - JavaBeanjaink szetteres módszereik miatt módosíthatók - ez párhuzamossági vagy konzisztencia-problémákhoz vezethet
  • Kazán - be kell vezetnünk az összes tulajdonságra vonatkozó gettert, a legtöbbre pedig a beállítókat, ezek nagy része felesleges lehet
  • Nulla argumentumú konstruktor - gyakran szükségünk van argumentumokra a konstruktőreinkben annak biztosítására, hogy az objektum érvényes állapotban legyen példányos, de a JavaBean szabvány megköveteli, hogy adjunk nulla argumentumú konstruktort

Ezen kompromisszumok alapján a keretrendszerek az évek során más babkonvenciókhoz is alkalmazkodtak.

5. Következtetés

Ebben az oktatóanyagban a POJO-kat hasonlítottuk össze a JavaBeans-szal.

Először megtudtuk, hogy a POJO egy Java objektum, amely nincs kötve konkrét kerethez, és hogy a JavaBean a POJO speciális típusa, szigorú konvenciókkal.

Aztán láttuk, hogy egyes keretek és könyvtárak hogyan használják fel a JavaBean elnevezési megállapodást az osztály tulajdonságainak felfedezésére.

Szokás szerint a példák elérhetők a GitHub oldalon.