Frage Was ist ein JavaBean genau?


Ich glaube, ich denke, dass ein "Bean" eine Java-Klasse mit Eigenschaften und Gettern / Settern ist. So viel ich verstehe, ist es das Äquivalent einer C-Struktur. Ist das wahr?

Gibt es auch eine echte? syntaktisch Unterschied zwischen einer Bohne und einer regulären Klasse? Gibt es eine spezielle Definition oder eine Schnittstelle?

Grundsätzlich, warum gibt es einen Begriff dafür?

Bearbeiten: Wenn Sie so freundlich sein können und Informationen über die hinzufügen Serializable Schnittstelle und was es bedeutet, zu Ihrer Antwort wäre ich sehr dankbar.


1361
2017-07-21 00:41


Ursprung


Antworten:


Ein JavaBean ist nur ein Standard

  1. Alle Eigenschaften privat (verwenden Sie Getters / Setter)
  2. Öffentlichkeit Kein-Argument-Konstruktor
  3. Implementiert Serializable.

Das ist es. Es ist nur eine Konvention. Viele Bibliotheken sind davon abhängig.

In Gedenken an Serializable, von dem API-Dokumentation:

Die Serialisierbarkeit einer Klasse wird durch die Klasse ermöglicht, die die Klasse implementiert   java.io.Serializable-Schnittstelle. Klassen, die dies nicht implementieren   Schnittstelle hat keinen Status serialisiert oder deserialisiert.   Alle Subtypen einer serialisierbaren Klasse sind selbst serialisierbar. Das   Serialisierungsschnittstelle hat keine Methoden oder Felder und dient nur dazu   Identifizieren Sie die Semantik der Serialisierung.

Mit anderen Worten, serialisierbare Objekte können in Streams und somit Dateien, Objektdatenbanken, alles wirklich geschrieben werden.

Außerdem gibt es keinen syntaktischen Unterschied zwischen einer JavaBean und einer anderen Klasse - eine Klasse definiert eine JavaBean, wenn sie den Standards folgt.

Es gibt einen Begriff dafür, weil der Standard es Bibliotheken ermöglicht, programmgesteuert Dinge mit Klasseninstanzen zu tun, die Sie auf eine vordefinierte Weise definieren. Wenn beispielsweise eine Bibliothek ein beliebiges übergebenes Objekt streamen möchte, weiß sie, dass dies möglich ist, weil Ihr Objekt serialisierbar ist (vorausgesetzt, die Bibliothek erfordert, dass Ihre Objekte richtige JavaBeans sind).


1496
2017-07-21 00:45



Es gibt einen Begriff, der es besonders klingen lässt. Die Realität ist nicht annähernd so mysteriös.

Grundsätzlich eine "Bean":

  • ist ein serialisierbares Objekt (dh es implementiert java.io.Serializableund tut es richtig), dass
  • hat "Eigenschaften", deren Getter und Setter nur Methoden mit bestimmten Namen sind getFoo() ist der Getter für die "Foo" Eigenschaft), und
  • hat einen öffentlichen Standardkonstruktor (kann also nach Belieben erstellt und durch Festlegen seiner Eigenschaften konfiguriert werden).

Aktualisieren:

Wie für Serializable: Das ist nichts anderes als ein "marker interface" (eine Schnittstelle, die keine Funktionen deklariert), die Java mitteilt, dass die implementierende Klasse der "Serialisierung" zustimmt (und impliziert, dass sie dazu in der Lage ist) - ein Prozess, der eine Instanz konvertiert in einen Strom von Bytes. Diese Bytes können in Dateien gespeichert werden, über eine Netzwerkverbindung usw. gesendet werden und genügend Informationen haben, um einer JVM (zumindest einer, die den Objekttyp kennt) zu ermöglichen, das Objekt später zu rekonstruieren - möglicherweise in einer anderen Instanz der Anwendung oder sogar auf einer ganz anderen Maschine!

Um dies zu erreichen, muss die Klasse natürlich bestimmte Einschränkungen einhalten. Das wichtigste unter ihnen ist, dass alle Instanzfelder entweder primitive Typen (int, bool usw.), Instanzen einer Klasse, die auch serialisierbar ist, oder als markiert sein müssen transient damit Java nicht versuchen wird, sie einzubeziehen. (Das bedeutet natürlich, dass transient Felder werden die Reise über einen Strom nicht überleben. Eine Klasse, die hat transient Felder sollten bereit sein, sie bei Bedarf neu zu initialisieren.)

Eine Klasse, die diese Einschränkungen nicht einhalten kann, sollte nicht implementiert werden Serializable (Und, IIRC, wird der Java-Compiler nicht einmal Lassen es tut so.)


242
2017-07-21 00:50



JavaBeans sind Java-Klassen, die sich an eine extrem einfache Programmierkonvention halten. Alles, was Sie tun müssen, ist zu

  1. Implementieren Sie die java.io.Serializable-Schnittstelle - Um den Status eines Objekt
  2. Verwenden Sie einen öffentlichen leeren Argumentkonstruktor, um das Objekt zu instanziieren
  3. Und bieten öffentliche Getter und Setter-Methoden - Um die Werte von privaten Variablen (Eigenschaften) zu bekommen und zu setzen.

79
2017-07-21 04:22



Eigenschaften von JavaBeans

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

  1. Die JavaBean-Klasse muss beides implementieren Serializable oder Externalizable 

  2. Die JavaBean-Klasse muss einen Konstruktor ohne Argumente haben

  3. Alle JavaBean-Eigenschaften müssen über öffentliche Setter- und Getter-Methoden verfügen

  4. Alle JavaBean-Instanzvariablen sollten privat sein

Beispiel für JavaBeans

@Entity
public class Employee implements Serializable{

   @Id
   private int id;
   private String name;   
   private int salary;  

   public Employee() {}

   public Employee(String name, int salary) {
      this.name = name;
      this.salary = salary;
   }
   public int getId() {
      return id;
   }
   public void setId( int id ) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName( String name ) {
      this.name = name;
   }
   public int getSalary() {
      return salary;
   }
   public void setSalary( int salary ) {
      this.salary = salary;
   }
}

48
2018-01-24 09:33



Java Beans verwenden für weniger Code und mehr Arbeitsansatz ... Java Beans werden in Java EE als universeller Vertrag zur Laufzeiterkennung und -zugriff verwendet. JavaServer Pages (JSP) verwendet beispielsweise Java Beans als Datenübertragungsobjekte zwischen Seiten oder zwischen Servlets und JSPs. Das JavaBeans Activation Framework von Java EE verwendet Java Beans, um Unterstützung für MIME-Datentypen in Java EE zu integrieren. Die Java EE Management API verwendet JavaBeans als Grundlage für die Instrumentierung von Ressourcen, die in einer Java EE-Umgebung verwaltet werden sollen.

Über Serialisierung:

Bei der Objektserialisierung kann ein Objekt als eine Sequenz von Bytes dargestellt werden, die die Daten des Objekts sowie Informationen über den Typ des Objekts und die Arten von Daten enthält, die in dem Objekt gespeichert sind.

Nachdem ein serialisiertes Objekt in eine Datei geschrieben wurde, kann es aus der Datei gelesen und deserialisiert werden, dh die Typinformationen und Bytes, die das Objekt darstellen, und seine Daten können zum Wiederherstellen des Objekts im Speicher verwendet werden.


18
2017-09-23 07:30



Sie werden feststellen, dass die Serialisierung nützlich ist, wenn Sie Ihr Projekt auf mehreren Servern bereitstellen, da die Beans persistent sind und über sie hinweg übertragen werden.


17
2017-07-21 06:03



Erklärung mit einem Beispiel.

1. import java.io.Serializable

Wie für die Serialisierung, siehe die Dokumentation.

2. private Felder

Felder sollten privat sein, damit äußere Klassen diese Felder nicht leicht ändern können. Anstatt direkt auf diese Felder zuzugreifen, werden gewöhnliche Getter / Setter-Methoden verwendet.

3. Konstruktor

Ein öffentlicher Konstruktor ohne Argument.

4. Getter / Setter

Getter- und Setter-Methoden für den Zugriff auf private Felder.

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = is;
    }
    public void setName(String name) {
        this.name = name;
    }
}

16
2017-08-22 12:45



Laut Wikipedia:

  1. Die Klasse muss einen öffentlichen Standardkonstruktor (ohne Argumente) haben. Dies ermöglicht eine einfache Instanziierung innerhalb von Editier- und Aktivierungs-Frameworks.

  2. Die Klasseneigenschaften müssen mit get, set, is (können für boolesche Eigenschaften anstelle von get verwendet werden) und anderen Methoden (so genannte Accessor-Methoden und Mutator-Methoden) gemäß einer Standardbenennungskonvention zugänglich sein. Dies ermöglicht eine einfache automatisierte Überprüfung und Aktualisierung des Bean-Status in Frameworks, von denen viele benutzerdefinierte Editoren für verschiedene Arten von Eigenschaften enthalten. Setter können ein oder mehrere Argumente haben.

  3. Die Klasse sollte serialisierbar sein. [Dadurch können Anwendungen und Frameworks den Status der Bean unabhängig von der VM und der Plattform zuverlässig speichern, speichern und wiederherstellen.]

Für weitere Informationen folgen Sie diesem Verknüpfung.


9
2018-06-16 11:41



Java Beans ist ein Standard und seine grundlegenden Syntaxanforderungen wurden durch die anderen Antworten klar erklärt.

IMO ist jedoch mehr als ein einfacher Syntax-Standard. Die eigentliche Bedeutung oder beabsichtigte Verwendung von Java Beans ist, zusammen mit verschiedenen Tool-Unterstützung rund um den Standard, die Wiederverwendung von Code und komponentenbasiertes Software-Engineering, dh Entwickler können Anwendungen erstellen, indem sie vorhandene Komponenten (Klassen) zusammenstellen und ohne schreiben müssen Code (oder nur ein wenig Klebstoff Code schreiben). Leider wird diese Technologie von der Industrie weit unterschätzt und zu wenig genutzt, was aus den Antworten in diesem Thread hervorgeht.

Wenn du Oracle liest Tutorial zu Java BeansSie können ein besseres Verständnis dafür bekommen.


8
2018-05-21 15:11



Was den zweiten Teil Ihrer Frage betrifft, ist Serialisierung ein Persistenzmechanismus, der verwendet wird, um Objekte als eine Folge von vorzeichenbehafteten Bytes zu speichern. Vereinfacht ausgedrückt speichert es den Zustand eines Objekts, sodass Sie es später durch De-Serialisierung abrufen können.


7
2017-07-21 01:14



Ein Java-Bean ist eine Java-Klasse [konzeptionell], die folgenden Konventionen folgen sollte:

  1. Es sollte einen Konstruktor ohne Argumente haben.
  2. Es sollte serialisierbar sein.
  3. Es sollte Methoden zum Festlegen und Abrufen der Werte der Eigenschaften bereitstellen, die als Getter- und Setter-Methoden bezeichnet werden.

Es ist eine wiederverwendbare Softwarekomponente. Es kann viele Objekte in ein Objekt einkapseln, so dass auf dasselbe Objekt von mehreren Stellen aus zugegriffen werden kann, und es ist ein Schritt in Richtung einer einfachen Pflege von Code.


7
2017-12-06 08:29