Konzept: JavaBean
Diese Richtlinie enthält einen Überblick über JavaBeans, ein einfaches und leistungsfähiges Komponentenmodell für Java.
Beziehungen
Zugehörige Elemente
Hauptbeschreibung

Einführung

JavaBeans definieren ein einfaches und leistungsfähiges Komponentenmodell für Java. JavaBeans werden eingesetzt, um geschlossene und wiederverwendbare Einheiten bereitzustellen, die die Entwickler entweder über das Programm oder visuell in den Tools des Erstellungsprogramms steuern können.

JavaBeans können die Bedienelemente einer grafischen Benutzerschnittstelle (GUI) sein, oder sie können ohne visuelle Darstellung verwendet werden. GUI-Bedienelemente in Java sind in der Regel JavaBeans, damit sie von den Tools des Erstellungsprogramms gesteuert werden können. In J2EE werden einfache JavaBeans häufig aus JSPs verwendet, wo sie eine Trennung zwischen der Darstellung in HTML und dem in den JavaBeans enthaltenen Java-Code ermöglichen.

Eine JavaBean ist eine Java-Klasse mit drei unterschiedlichen Features:

Eigenschaften der JavaBean

Die Eigenschaften einer JavaBean können über andere Komponenten aufgerufen werden. Normalerweise ist eine Eigenschaft ein privater Wert, der über setter- und getter-Methoden aufgerufen wird, aber es kann auch ein berechneter Wert sein. Die Aktualisierung von Eigenschaften kann verschiedene Nebeneffekte haben.

Zugriffsmethoden (Accessor) sind Methoden für den Zugriff auf Eigenschaften. Dabei kann es sich um getter- und setter-Methoden handeln. Sie verwenden die folgende Namenskonvention:

void setName_der_Eigenschaft(Typ_der_Eigenschaft value); // setter
Typ_der_Eigenschaft getName_der_Eigenschaft() // getter

Für eine Boolesche Eigenschaft kann eine getter-Methode wie folgt aussehen:

boolean isName_der_Eigenschaft() // getter für eine Boolesche Eigenschaft

Beispiel: Bean "Customer"

Nachfolgend ist ein Beispiel für eine einfache JavaBean (Customer) mit zwei einfachen Eigenschaften, name und email, aufgeführt. Beachten Sie, wie die Eigenschaften über die set-/get-Methodenpaare definiert werden.

UML-Diagramm, das Eigenschaften von Customer zeigt.

public class Customer {
private String name;
private String email;

public String getName() {
return name;
}

public void setName(String aName) {
name = aName;
}

public String getEmail() {
return email;
}

public void setEmail(String aEmail) {
email = aEmail;
}

}

Solche einfachen JavaBeans werden häufig in JSPs verwendet, wo sie den Transport von Werten aus Formularen der Webseiten ermöglichen.

Indexierte Eigenschaften

Außer einfachen Eigenschaften, die einen einzelnen Wert haben, gibt es auch Eigenschaften, die eine Gruppe von Werten in einem Wertebereich enthalten.

Indexierte Eigenschaften können einen Wert am spezifizierten Index oder den gesamten Wertebereich zurückgeben.

Indexierte Eigenschaften haben folgende Signaturen:

void setName_der_Eigenschaft(int index, Typ_der_Eigenschaft value); // indexierte setter-Methode
Typ_der_Eigenschaft getter(int index); // indexierte getter-Methode
void setName_der_Eigenschaft(Typ_der_Eigenschaft values[]); // setter-Methode für Bereich
Typ_der_Eigenschaft[]getName_der_Eigenschaft(); // getter-Methode für Bereich

Gebundene Eigenschaften

Der Mechanismus der gebundenen Eigenschaften ("Bound Properties") umfasst einen Benachrichtigungsservice für den Fall, dass sich eine Eigenschaft ändert. Objekte, die über die Änderung benachrichtigt werden möchten, registrieren sich vorher. Wenn die Änderung der Eigenschaft stattfindet, werden Benachrichtigungen an die registrierten Objekte gesendet. Normalerweise erfolgt eine solche Benachrichtigung über ein Ereignis, das von der Komponente mit der gebundenen Eigenschaft nach dem Festlegen der Eigenschaft gestartet wird.

Eine JavaBean mit einer gebundenen Eigenschaft stellt Methoden zur Registrierung und Deregistrierung der Objekte bereit, die an einer Benachrichtigung über die Änderung der Eigenschaft interessiert sind und als Listener bezeichnet werden. Die Entwickler können eigene Methoden der Benachrichtigung definieren, aber die Java-Bibliotheken stellen eine Reihe von Unterstützungsklassen im java.beans-Paket bereit, die normalerweise verwendet werden.

Eingeschränkte Eigenschaften

Eingeschränkte Eigenschaften sind den gebundenen Eigenschaften ähnlich, aber die Benachrichtigung erfolgt vor der tatsächlichen Änderung der Eigenschaft. Dies erlaubt es den interessierten Objekten, die Änderung der Eigenschaft durch Auslösen einer Ausnahme vom Typ PropertyVetoException zu verhindern.

Ereignisse und Benachrichtigung

Ereignisse sind Funktionen von JavaBeans, mit deren Hilfe Komponenten, die unabhängig voneinander entwickelt wurden, miteinander kommunizieren können, indem sie Informationen über die Statusänderung weitergeben. In diesem Modell starten einige Komponenten Ereignisse, die von anderen Komponenten in ihrer Rolle als Ereignis-Listener empfangen werden.

Zur Unterstützung dieses Kommunikationsmodells stellt das JavaBeans-Komponentenmodell Folgendes bereit:

  • Eigenschaften, die Ereignisse starten können (gebundene und eingeschränkte Eigenschaften)
  • Registrierungsmethoden, über die sich Listener registrieren können
  • Ereignisse, die Informationen bezüglich der Änderungen übertragen
  • Listener, die auf das gelieferte Ereignis reagieren können

Das folgende Klassendiagramm zeigt diese Konzepte für eine JavaBean mit dem Namen EventSource mit der einfachen Eigenschaft int.

Im Begleittext beschriebenes Diagramm.

Während der Konfiguration registrieren sich konkrete Listener bei der JavaBean. Später ruft ein anderes Objekt die Methode setProperty auf, wodurch der Benachrichtigungsprozess gestartet wird, indem das Ereignisobjekt erstellt wird. Die JavaBean EventSource ruft die Methode propertyChange für alle registrierten Listener auf. Ereignis-Listener empfangen das Ereignis, lesen die darin enthaltenen Werte und reagieren auf das Ereignis.

Das folgende Ablaufdiagramm zeigt die Reihenfolge der Aufrufe:

Im Begleittext beschriebenes Diagramm.

Die Benachrichtigung der Listener erfolgt synchron in Bezug auf die JavaBean-Instanz, die die Quelle des Ereignisses ist. Der Ereignis-Listener kann die Ereignisse jedoch in einem anderen Thread verarbeiten.

Introspektion

Die Introspektion ist ein Laufzeitverfahren zur Ermittlung von Eigenschaften, Ereignissen und Methoden einer JavaBean. Die Introspektion wird von Entwicklungstools und von Programmen ohne fest codierte Abhängigkeiten von anderen Komponenten verwendet. Sie wird über Reflexion und über eine Gruppe von Konventionen zur Benennung von Methoden und Schnittstellen erreicht. Weitere Funktionen der Introspektion werden von der Klasse BeanInfo unterstützt. Die JavaBeans-Namenskonventionen, die für die Introspektion verwendet werden, werden manchmal als "Designmuster" bezeichnet. Sie sollten jedoch nicht mit dem Konzept der Designmuster im objektorientierten Design verwechselt werden.

Datenspeicherung

Eine JavaBean kann über ein Serialisierungsverfahren gespeichert werden. Die Serialisierung kann automatisch oder angepasst sein, abhängig davon, ob die JavaBean die Schnittstelle Serializable oder die Schnittstelle Externalizable implementiert. JDK 1.4 führt die Klassen XMLEncoder und XMLDecoder ein, die das Speichern von JavaBeans-Instanzen im XML-Format ermöglichen.

Anpassung

Darstellung und Verhalten einer JavaBean können zur Entwicklungszeit angepasst werden. Dies ist besonders wichtig für visuelle JavaBeans, die in grafischen Benutzerschnittstellen verwendet werden. Die Anpassung erfolgt über einen Eigenschafteneditor oder über Anpassungsfunktionen. Die Anpassungsfunktionen stellen eine angepasste Benutzerschnittstelle bereit, über die eine JavaBean-Instanz zur Entwicklungszeit konfiguriert werden kann.

BeanContext

BeanContext definiert eine logische Containerhierarchie, mit deren Hilfe JavaBeans ihre Umgebung auf Funktionalität und Services abfragen können. Die BeanContext-Verfahren bieten Unterstützung für die logische Containerhierarchie von JavaBeans und für die Suche nach Services, die von JavaBeans in der Hierarchie bereitgestellt werden.

JavaBeans™ Activation Framework

Das Java Activation Framework ist eine Java-Standarderweiterung, mit der Folgendes realisiert werden kann: den Typ einer Datenmenge bestimmen, deren Einbindung ermitteln, ihre verfügbaren Operationen feststellen und eine Softwarekomponente instanzieren, die der gewünschten Operation für die Datenmenge entspricht.

Weitere Informationen

Weitere Informationen zu JavaBeans finden Sie in der JavaBeans API Spezifikation Version 1.01 auf der Website http://java.sun.com/. Folgen Sie den Links zu Docs & Training > Java 2 Platform, Standard Edition > Java 2 SDK, SE v1.3 documentation > JavaBeans > JavaBeans Specification.