Was ist der Unterschied zwischen einer JavaBean und einem POJO?


210

Ich bin mir über den Unterschied nicht sicher. Ich verwende Hibernate und in einigen Büchern werden JavaBean und POJO als austauschbare Begriffe verwendet. Ich möchte wissen, ob es einen Unterschied gibt, nicht nur im Hibernate-Kontext, sondern als allgemeine Konzepte.

Antworten:


252

Eine JavaBean folgt bestimmten Konventionen. Getter / Setter-Benennung, mit einem öffentlichen Standardkonstruktor, serialisierbar usw. Weitere Informationen finden Sie unter JavaBeans-Konventionen .

Ein POJO (Plain-Old-Java-Objekt) ist nicht streng definiert. Es handelt sich um ein Java-Objekt, für das keine bestimmte Schnittstelle implementiert oder von einer bestimmten Basisklasse abgeleitet oder bestimmte Anmerkungen verwendet werden müssen, um mit einem bestimmten Framework kompatibel zu sein. Es kann beliebig sein (häufig relativ einfach). Java-Objekt.


41
Beachten Sie, dass eine JavaBean ein POJO sein kann und normalerweise ist und viele POJOs tatsächlich JavaBeans sind.
Joachim Sauer

8
Nein, nach der Definition von POJO ist eine Java-Bean keine POJO, da eine Klasse bestimmte Codierungskonventionen befolgen muss, um als Java-Bean betrachtet zu werden (z. B. einen Konstruktor ohne Argumente, Methoden, die mit den Wörtern "get" und / oder beginnen) "set") oder mit einer BeanInfo-Klasse verteilt werden.
Nat

15
Da dies Konventionen sind , können Sie meiner Meinung nach erfolgreich argumentieren, dass eine Bean ein POJO sein kann (z. B. erben Sie nicht von einer JavaBean-Schnittstelle oder ähnlichem)
Brian Agnew

1
Die JavaBeans-Spezifikation definiert keine andere JavaBean als sehr lose als "wiederverwendbare Softwarekomponente" (oder eine solche). Es muss keinen Konstruktor ohne Argumente haben, benötigt keine Methoden, die mit "get" oder "set" beginnen, muss nicht serialisierbar sein, muss nicht einmal eine Klasse sein.
Tom Hawtin - Tackline

4
In mathematischen Begriffen können wir sagen, dass Javabeans eine Teilmenge von POJO bilden, weil bestimmte Einschränkungen, die einem POJO auferlegt werden, es zu einem Javabean machen.
Nishit

106

Alle JavaBeans sind POJOs, aber nicht alle POJOs sind JavaBeans.

Eine JavaBean ist ein Java-Objekt, das bestimmte Programmierkonventionen erfüllt:

  • Die JavaBean-Klasse muss entweder Serializable oder Externalizable implementieren.
  • Die JavaBean-Klasse muss einen öffentlichen Konstruktor ohne Argumente haben.
  • Alle JavaBean-Eigenschaften müssen über öffentliche Setter- und Getter-Methoden verfügen (je nach Bedarf).
  • Alle JavaBean-Instanzvariablen sollten privat sein.

1
Ich dachte, POJOs können nicht implementieren Serializable.
NaXa

10
"Die JavaBean-Klasse muss einen Konstruktor ohne Argumente haben." auch hier öffentlich hinzufügen
radistao

Eine JavaBean ist serialisierbar und deshalb ist eine JavaBean KEIN POJO.
Karlihnos

25

Laut Martin Fowler ist ein POJO ein Objekt, das Business Logic kapselt, während eine Bean (mit Ausnahme der Definition, die bereits in anderen Antworten angegeben ist) kaum mehr als ein Container zum Speichern von Daten ist und die für das Objekt verfügbaren Operationen lediglich Daten setzen und abrufen.

Der Begriff wurde geprägt, als Rebecca Parsons, Josh MacKenzie und ich uns auf einer Konferenz im September 2000 auf einen Vortrag vorbereiteten. In dem Vortrag wiesen wir auf die vielen Vorteile der Codierung von Geschäftslogik in reguläre Java-Objekte hin, anstatt Entity Beans zu verwenden. Wir fragten uns, warum Menschen so dagegen waren, normale Objekte in ihren Systemen zu verwenden, und kamen zu dem Schluss, dass einfache Objekte keinen ausgefallenen Namen hatten. Also haben wir ihnen eine gegeben, und sie hat sich sehr gut durchgesetzt.

http://www.martinfowler.com/bliki/POJO.html


7

POJO: Wenn die Klasse mit dem zugrunde liegenden JDK ausgeführt werden kann, ohne dass andere externe Bibliotheken von Drittanbietern dies unterstützen, heißt sie POJO

JavaBean: Wenn die Klasse nur Attribute mit Accessoren (Setter und Getter) enthält, werden diese als Javabean bezeichnet. Java-Beans enthalten im Allgemeinen keine Geschäftslogik, sondern werden zum Speichern einiger Daten verwendet.

Alle Javabeans sind POJOs, aber alle POJO sind keine Javabeans


7

Pojo - Einfaches altes Java-Objekt

Die Pojo-Klasse ist eine gewöhnliche Klasse ohne Besonderheiten, eine Klasse, die vollständig lose von Technologie / Framework gekoppelt ist. Die Klasse implementiert nicht von Technologie / Framework und erstreckt sich nicht von der Technologie / Framework-API. Diese Klasse wird Pojo-Klasse genannt.

Die Pojo-Klasse kann Schnittstellen implementieren und Klassen erweitern, aber die Superklasse oder Schnittstelle sollte keine Technologie / kein Framework sein.

Beispiele:

1.

class ABC{
----
}

ABC-Klasse, die Technologie / Framework nicht implementiert oder erweitert, deshalb ist dies die Pojo-Klasse.

2.

class ABC extends HttpServlet{
---
}

ABC-Klasse, die von der Servlet-Technologie-API ausgeht, deshalb ist dies keine Pojo-Klasse.

3.

class ABC implements java.rmi.Remote{
----
}

ABC-Klasse implementiert von rmi api, deshalb ist dies keine Pojo-Klasse.

4.

class ABC implements java.io.Serializable{
---
}

Diese Schnittstelle ist Teil der Java-Sprache und nicht Teil der Technologie / des Frameworks. Dies ist also die Pojo-Klasse.

5.

class ABC extends Thread{
--
}

Hier ist Thread auch eine Klasse der Java-Sprache, also ist dies auch eine Pojo-Klasse.

6.

class ABC extends Test{
--
}

Wenn die Testklasse von Technologien / Frameworks erweitert oder implementiert wird, ist ABC auch keine Pojo-Klasse, da es die Eigenschaften der Testklasse erbt. Wenn die Testklasse keine Pojo-Klasse ist, ist die ABC-Klasse auch keine Pojo-Klasse.

7.

Jetzt ist dieser Punkt ein Ausnahmefall

@Entity
class ABC{
--
}

@Entityist eine Anmerkung von hibernate api oder jpa api, aber wir können diese Klasse trotzdem als Pojo-Klasse bezeichnen. Klasse mit Anmerkungen aus Technologie / Framework wird in diesem Ausnahmefall als Pojo-Klasse bezeichnet.



1

POJOSmit bestimmten Konventionen (Getter / Setter, öffentlicher No-Arg-Konstruktor, private Variablen) und sind in Aktion (zB zum Lesen von Daten nach Formular) JAVABEANS.


1

Zusammenfassend: Ähnlichkeiten und Unterschiede sind:

   java beans:                          Pojo:
-must extends serializable              -no need to extends or implement.
 or externalizable.                     
-must have public class .               - must have public class
-must have private instance variables.      -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor.           - can have constructor with agruments.

Alle JAVA-Bohnen sind POJO, aber nicht alle POJOs sind JAVA-Bohnen.


0

Sie haben die obigen formalen Definitionen gesehen, für alles, was sie wert sind.

Aber lassen Sie sich nicht zu sehr auf Definitionen ein. Schauen wir uns hier den Sinn der Dinge genauer an .

JavaBeans werden in Enterprise Java-Anwendungen verwendet, in denen Benutzer häufig remote auf Daten und / oder Anwendungscode zugreifen, dh von einem Server (über das Web oder ein privates Netzwerk) über ein Netzwerk. Die beteiligten Daten müssen daher im seriellen Format in die Computer der Benutzer oder aus diesen heraus gestreamt werden. Daher müssen Java EE-Objekte die Schnittstelle Serializable implementieren. So viel von der Natur einer JavaBean unterscheidet sich nicht von Java SE-Anwendungsobjekten, deren Daten aus einem Dateisystem eingelesen oder in dieses geschrieben werden. Die zuverlässige Verwendung von Java-Klassen über ein Netzwerk aus einer Reihe von Benutzer-Computer / Betriebssystem-Kombinationen erfordert auch die Annahme von Konventionen für deren Behandlung. Daher ist es erforderlich, diese Klassen als öffentlich, mit privaten Attributen, als Konstruktor ohne Argumente und als standardisierte Getter und Setter zu implementieren.

Java EE-Anwendungen verwenden auch andere Klassen als die, die als JavaBeans implementiert wurden. Diese können zum Verarbeiten von Eingabedaten oder zum Organisieren von Ausgabedaten verwendet werden, werden jedoch nicht für Objekte verwendet, die über ein Netzwerk übertragen werden. Daher müssen die obigen Überlegungen nicht auf sie angewendet werden, außer dass sie als Java-Objekte gültig sind. Diese letzteren Klassen werden als POJOs - Plain Old Java Objects bezeichnet.

Alles in allem könnten Sie Java Beans als nur Java-Objekte betrachten, die für die Verwendung über ein Netzwerk angepasst sind.

Seit 1995 gibt es in der Software-Welt eine Menge Hype - und nicht wenig Humbug.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.