Apache Commons BeanUtils

1. Áttekintés

Az Apache Commons BeansUtils minden olyan eszközt tartalmaz, amely a Java babokkal való munkához szükséges.

Egyszerűen fogalmazva, a bab egy egyszerű Java osztály, amely mezőket, gettereket / beállítókat és argumentum nélküli konstruktort tartalmaz.

A Java reflektálási és önvizsgálati képességeket kínál a getter-szetter módszerek azonosítására és dinamikus hívására. Ezeket az API-kat azonban nehezen lehet megtanulni, és megkövetelhetik a fejlesztőktől, hogy a legegyszerűbb műveletek elvégzéséhez írják a kazán kódot.

2. Maven-függőségek

Itt van, hogy a MAV függőséget fel kell venni a POM fájlba, mielőtt használnánk:

 commons-beanutils commons-beanutils 1.9.3 

A legújabb verzió itt található.

3. Java bab létrehozása

Hozzunk létre két babosztályt Tanfolyam és Diák tipikus getter és szetter módszerekkel.

nyilvános osztály Tanfolyam {private String name; privát lista kódok; privát térkép enrolledStudent = new HashMap (); // szokásos getters / setters} 
public class Student {private String name; // szokásos getters / setters}

Nekünk van Tanfolyam osztály, amelynek van kurzus neve, tanfolyam kódja és több beiratkozott hallgató. A beiratkozott hallgatókat egyedi beiratkozási azonosító alapján azonosítják. Tanfolyam osztály fenntartja a beiratkozott diákokat a Térkép objektum, ahol a beiratkozási azonosító kulcs, és a diákobjektum lesz az értéke.

4. Tulajdonhozzáférés

A bab tulajdonságai három kategóriába sorolhatók.

4.1. Egyszerű tulajdonság

Az egyértékű tulajdonságokat egyszerűnek vagy skalárnak is nevezzük.

Értékük lehet primitív (például int, float) vagy komplex típusú objektum. A BeanUtils rendelkezik egy PropertyUtils osztály, amely lehetővé teszi számunkra az egyszerű tulajdonságok módosítását egy Java Bean-ban.

Itt van a példa kód a tulajdonságok beállításához:

Tanfolyam = új tanfolyam (); Karakterlánc neve = "Számítástechnika"; Lista kódok = Arrays.asList ("CS", "CS01"); PropertyUtils.setSimpleProperty (tanfolyam, "név", név); PropertyUtils.setSimpleProperty (tanfolyam, "kódok", kódok);

4.2. Indexelt tulajdonság

Az indexelt tulajdonságok gyűjteményként értékként szerepelnek, amely egy indexszám segítségével egyedileg elérhető. A JavaBean kiterjesztéseként a BeanUtils figyelembe veszi java.util.List típusú értékek indexelve is.

Az indexelt tulajdonság egyedi értékét módosíthatjuk az a használatával PropertyUtils'ssetIndexedProperty módszer.

Íme egy példa az indexelt tulajdonság módosítására:

PropertyUtils.setIndexedProperty (tanfolyam, "kódok [1]", "CS02");

4.3. Feltérképezett tulajdonság

Minden olyan ingatlan, amelynek a java.util.Térkép mivel az alapul szolgáló típust leképezett tulajdonságnak nevezzük. A BeanUtils lehetővé teszi számunkra, hogy a térképen frissítsük az egyedi értéket a segítségével Húrértékű kulcs.

Itt van a példa kód a leképezett tulajdonság értékének módosítására:

Hallgató diák = új Tanuló (); Karakterlánc studentName = "Joe"; student.setName (studentName); PropertyUtils.setMappedProperty (tanfolyam, "beiratkozottStudent (ST-1)", hallgató);

5. Beágyazott tulajdonhoz való hozzáférés

Ha egy tulajdonság értéke objektum, és hozzá kell férnünk egy objektumon belüli tulajdonságértékhez - ez egy beágyazott tulajdonsághoz lenne hozzáférés. PropertyUtils lehetővé teszi számunkra a hozzáférést és beágyazott tulajdonságok módosítása is.

Tegyük fel, hogy a (z) név tulajdonságához szeretnénk hozzáférni Diák osztályon keresztül Tanfolyam tárgy. Írhatunk:

Karakterlánc neve = course.getEnrolledStudent ("ST-1"). GetName ();

A beágyazott tulajdonságértékeket a getNestedProperty és módosítsa a beágyazott tulajdonságot a setNestedProperty módszerek PropertyUtils. Itt van a kód:

Hallgató diák = új Tanuló (); Karakterlánc studentName = "Joe"; student.setName (studentName); String nameValue = (String) PropertyUtils.getNestedProperty (tanfolyam, "enrolledStudent (ST-1) .name");

6. Másolja a bab tulajdonságait

Az egyik objektum tulajdonságainak másolása egy másik objektumra gyakran unalmas és hibára hajlamos a fejlesztők számára. BeanUtils osztály biztosítja a copyProperties módszer, amely a forrásobjektum tulajdonságait a célobjektumra másolja ahol a tulajdonság neve mindkét objektumban azonos.

Hozzunk létre egy másik babosztályt as Tanfolyam a fentiekkel azonos tulajdonságokkal hoztunk létre, kivéve, ha nem lesz beiratkozottStudent tulajdonság helyett a tulajdonság neve lesz diákok. Nevezzük meg azt az osztályt CourseEntity. Az osztály a következőképpen néz ki:

public class CourseEntity {private String name; privát lista kódok; privát térképes hallgatók = új HashMap (); // szokásos getters / setters}

Most átmásoljuk a tulajdonságait Tanfolyam tiltakozni CourseEntity tárgy:

Tanfolyam = új tanfolyam (); course.setName ("Számítástechnika"); course.setCodes (Arrays.asList ("CS")); course.setEnrolledStudent ("ST-1", új Student ()); CourseEntity courseEntity = új CourseEntity (); BeanUtils.copyProperties (courseEntity, course);

Ne feledje, hogy ez csak az azonos nevű tulajdonságokat másolja. Ezért nem másolja az ingatlant beiratkozottStudent ban ben Tanfolyam osztály, mert a (z) domainben nincs azonos nevű tulajdonság CourseEntity osztály.

7. Következtetés

Ebben a rövid cikkben áttekintettük a közüzemi osztályokat BeanUtils. Különböző típusú tulajdonságokat is megvizsgáltunk, és hogyan érhetjük el és módosíthatjuk az értékeiket.

Végül megvizsgáltuk a beágyazott tulajdonságok elérését és az egyik objektum tulajdonságainak másolását egy másik objektumra.

Természetesen a Java SDK reflektálási és önvizsgálati képességei lehetővé teszik a tulajdonságok dinamikus elérését is, de nehéz lehet megtanulni, és némi kazán kódra van szükség. BeanUtils lehetővé teszi számunkra, hogy egyetlen metódus hívással hozzáférjünk és módosítsuk ezeket az értékeket.

A kódrészletek megtalálhatók a GitHubon.


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