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.
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.
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:
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.
|