Sima régi Java objektum - Plain old Java object
A szoftverfejlesztésben a sima régi Java objektum ( POJO ) egy közönséges Java objektum , amelyre semmilyen különleges korlátozás nem vonatkozik. A kifejezést Martin Fowler , Rebecca Parsons és Josh MacKenzie alkotta 2000 szeptemberében:
"Azon tűnődtünk, hogy miért ellenzik az emberek a rendszeres tárgyak használatát a rendszerükben, és arra a következtetésre jutottunk, hogy ez azért van, mert az egyszerű tárgyaknak nem volt fantázianévük. Így adtunk nekik egyet, és ez nagyon szépen megfogott."
A "POJO" kifejezés kezdetben egy Java objektumot jelölt, amely nem követi a fő Java objektummodelleket, konvenciókat vagy keretrendszereket; manapság a "POJO" használható a sima régi JavaScript objektumok rövidítéseként is, ebben az esetben a kifejezés egy hasonló törzsű JavaScript objektumot jelöl .
A kifejezés folytatja az érme -utónevek rövidítését olyan technológiákhoz, amelyek nem használnak divatos új funkciókat: sima régi Ruby -objektum (PORO) a Ruby -ban , sima régi telefonszolgáltatás (POTS) a telefonálásban és a Plain Old Documentation (pod) a Perl -ben . Az egyenértékű POJO a .NET Framework az öreg CLR objektum (POCO). Mert PHP , ez öreg PHP objektum (POPO).
A POJO jelenség nagy valószínűséggel széles körben elfogadottá vált, mivel szükség van egy közös és könnyen érthető kifejezésre, amely ellentétes a bonyolult objektumkeretekkel.
Meghatározás
Ideális esetben a POJO egy Java objektum, amelyre semmilyen korlátozás nem vonatkozik, kivéve azokat, amelyeket a Java nyelvi specifikáció kényszerít; azaz a POJO -nak nem kell
- Bővítse az előre meghatározott osztályokat, mint pl
public class Foo extends javax.servlet.http.HttpServlet { ...
- Előre meghatározott interfészek megvalósítása, például
public class Bar implements javax.ejb.EntityBean { ...
- Előre meghatározott megjegyzéseket tartalmaz , mint például
@javax.persistence.Entity public class Baz { ...
Technikai nehézségek és egyéb okok miatt azonban számos szoftvertermék vagy keretrendszer, amelyet POJO-kompatibilisnek minősítenek, valójában továbbra is megköveteli az előre meghatározott megjegyzések használatát az olyan funkciókhoz, mint például a kitartás a megfelelő működéshez. Az elképzelés az, hogy ha az objektum (valójában osztály) POJO lenne a megjegyzések hozzáadása előtt, és visszatérne a POJO állapotba, ha a megjegyzéseket eltávolítják, akkor is POJO -nak tekinthető. Ekkor az alapobjektum POJO marad abban az értelemben, hogy nincsenek olyan különleges jellemzői (például egy megvalósított interfész), amely "Specialized Java Object" -vé (SJO vagy (sic) SoJO) teszi.
Kontextuális variációk
JavaBeans
A JavaBean egy POJO, amely sorosítható , argumentum nélküli konstruktorral rendelkezik , és lehetővé teszi a tulajdonságokhoz való hozzáférést az egyszerű elnevezési konvenciót követő getter és setter metódusok használatával . Ennek az egyezménynek köszönhetően egyszerű kijelentő hivatkozások tehetők tetszőleges JavaBeans tulajdonságaira. Az ilyen kijelentő hivatkozást használó kódnak nem kell semmit tudnia a bab típusáról, és a bab használható sok keretrendszerrel anélkül, hogy ezeknek a keretrendszereknek ismernie kellene a bab pontos típusát. A JavaBeans specifikáció, ha teljes mértékben megvalósul, kissé megtöri a POJO modellt, mivel az osztálynak végre kell hajtania a Serializable interfészt, hogy valódi JavaBean legyen. Sok, továbbra is JavaBeans nevű POJO osztály nem felel meg ennek a követelménynek. Mivel a Serializable egy marker (módszer nélküli) felület, ez nem jelent nagy terhet.
Az alábbiakban egy példa látható egy JavaServer Faces (JSF) összetevőre, amely kétirányú kötéssel rendelkezik a POJO tulajdonságához:
<h:inputText value="#{MyBean.someProperty}"/>
A POJO meghatározása a következő lehet:
public class MyBean {
private String someProperty;
public String getSomeProperty() {
return someProperty;
}
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
}
A JavaBean elnevezési konvenciók miatt az egyetlen "someProperty" hivatkozás automatikusan lefordítható a "getSomeProperty ()" (vagy "isSomeProperty ()", ha a tulajdonság logikai típusú ) módszerre az érték lekérésére, és a "setSomeProperty ( String) "módszer érték beállítására.
Szolgáltatások átlátható hozzáadása
Ahogy a POJO -kat használó tervek egyre gyakoribbak lettek, olyan rendszerek jöttek létre, amelyek a POJO -k számára a keretrendszerekben használt teljes funkcionalitást biztosítják, és nagyobb választási lehetőséget biztosítanak arra vonatkozóan, hogy a funkcionalitás mely területeire van szükség. Ebben a modellben a programozó csak POJO -t hoz létre. Ez a POJO pusztán az üzleti logikára összpontosít, és nem függ a (vállalati) keretektől. Az aspektusorientált programozási (AOP) keretek ezután átláthatóan olyan átfogó aggályokat adnak hozzá, mint a kitartás, a tranzakciók, a biztonság stb.
A tavasz ennek az ötletnek a korai megvalósítása és a modell népszerűsítésének egyik hajtóereje.
Példa arra, hogy az EJB bab POJO:
- Vállalati JavaBeans (EJB),
- Java Persistence API (JPA) (beleértve a hibernált állapotot )
- CDI (Contexts and Dependency Injection a Java EE platformhoz)
Az alábbiakban egy teljesen működőképes EJB bab látható, bemutatva, hogy az EJB3 hogyan használja ki a POJO modellt:
public class HelloWorldService {
public String sayHello() {
return "Hello, world!";
}
}
A babnak nem kell semmilyen EJB osztályt kiterjesztenie vagy EJB interfészt megvalósítania, és nem kell tartalmaznia sem EJB megjegyzéseket. Ehelyett a programozó egy külső XML fájlban deklarálja, hogy mely EJB szolgáltatásokat kell hozzáadni a babhoz:
<enterprise-beans>
<session>
<ejb-name>helloWorld</ejb-name>
<ejb-class>com.example.HelloWorldService</ejb-class>
<session-type>stateless</session-type>
</session>
</enterprise-beans>
A gyakorlatban egyesek elegánsnak találják a megjegyzéseket, míg az XML -t sokoldalúnak, csúnyának és nehezen karbantarthatónak tartják, mások szerint a megjegyzések szennyezik a POJO modellt.
Így az XML alternatívájaként számos keretrendszer (pl. Spring, EJB és JPA) lehetővé teszi a megjegyzések használatát az XML helyett vagy mellett. Az alábbiakban ugyanaz az EJB bab látható, mint fent, de megjegyzéssel. Ebben az esetben az XML fájlra már nincs szükség:
@Stateless
public class HelloWorldService {
public String sayHello() {
return "Hello, world!";
}
}
A fenti megjegyzéssel a bab már nem igazán tiszta POJO, de mivel a feliratok pusztán passzív metaadatok, ennek sokkal kevesebb káros hátránya van, mint az osztályok kiterjesztésének és/vagy interfészek megvalósításának invazivitása. Ennek megfelelően a programozási modell még mindig nagyon hasonlít a tiszta POJO modellre.
Kapcsolódó rövidítések
Sima régi Java felület
A sima régi Java interfész (POJI) a Java interfész alapvető formája, és elfogadható olyan helyeken, ahol a bonyolultabb Java interfészek nem engedélyezettek.