Richtlinie: Design von JavaBeans
Diese Richtlinie erläutert das Design von JavaBeans für eine J2EE-Anwendung.
Beziehungen
Zugehörige Elemente
Hauptbeschreibung

Einführung

Diese Richtlinie konzentriert sich auf das Design von JavaBeans und die verschiedenen Auswahlmöglichkeiten, unter denen ein Designer wählen kann.

Nähere Informationen zu JavaBeans finden Sie unter Konzept: JavaBeans.

Eigenschaften der JavaBean

Intern kann ein Eigenschaftswert als privates Feld gespeichert werden, er kann jedoch auch berechnet werden. Der Designer hat die Möglichkeit, den Wert der Eigenschaft im voraus zu berechnen, oder die Berechnung nach Bedarf zu verwenden, wobei der Wert nur dann berechnet wird, wenn er von einem Aufrufer angefordert wird.

Der Designer hat außerdem die Möglichkeit, die Eigenschaft zu binden oder durch Bedingungen einzuschränken. Wird eine Eigenschaft gebunden oder durch Bedingungen eingeschränkt, dann muss der Designer den Mechanismus für Ereignisse und Benachrichtigungen festlegen.

Ereignisse und Benachrichtigungen

Zur Implementierung des Benachrichtigungsmechanismus stehen dem Designer zwei Möglichkeiten zur Verfügung:

  • Er kann die Klassen PropertyChangeSupport und PropertyChangeEvent aus dem Paket java.beans verwenden.
  • Er kann einen angepassten Benachrichtigungsmechanismus verwenden.

Die Klassen aus dem Paket java.beans bieten eine Implementierung, die in den meisten Fällen gültig ist. PropertyChangeEvent enthält die Referenz auf das Objekt, das das Ereignis ausgelöst hat, den Namen der Eigenschaft als Zeichenfolge (String) sowie zwei Objekte, die den alten und den neuen Wert der Eigenschaft darstellen. Die Klasse PropertyChangeSupport verwaltet eine Gruppe von PropertyChangeListeners und enthält den Code für die Benachrichtigung in der Methode firePropertyChange.

Im Begleittext beschriebenes Diagramm.

PropertyChangeSupport wird im allgemeinen für JavaBeans verwendet, die einen Teil der Benutzerschnittstellen bilden.

Eine angepasste Benachrichtigung kann erforderlich sein, wenn der Systemaufwand für das Erstellen von Ereignisobjekten verringert werden muss. Der Nachteil liegt darin, dass der Benachrichtigungsmechanismus vom Implementierer implementiert werden muss. Der Implementierer der angepassten Benachrichtigung muss beachten, dass während des Benachrichtigungsprozesses Listener von einem anderen Thread hinzugefügt oder entfernt werden können. Um das richtige Verhalten zu erreichen, wird bei den meisten Lösungen eine Kopie der Listener-Gruppe erstellt. Die Benachrichtigung findet dann unter Verwendung dieser Kopie statt. Die meisten veröffentlichten Implementierungen erstellen eine solche Kopie zu Beginn des Benachrichtigungsprozesses. Dies führt dazu, dass viele Klone erstellt werden und die Leistung vermindert wird. Weil die Benachrichtigungen jedoch häufiger stattfinden als das Hinzufügen oder Entfernen von Listener, kann während dem Hinzufügen oder Entfernen der Listener eine langlebigere Kopie im voraus erstellt und anschließend für die Benachrichtigungen verwendet werden. Auf diese Weise ist eine schnellere Ausführung möglich.

Berücksichtigt man die Produktivität der Designer, dann sollten angepasste Benachrichtigungen nur dann verwendet werden, wenn erkennbar wird, dass die im Paket java.beans enthaltene Unterstützung für Eigenschaftenänderung einen Leistungsengpass verursacht.

Das folgende Beispiel zeigt sowohl die Verwendung der im Paket java.beans enthaltenen Unterstützung für Eigenschaftenänderung als auch die Verwendung der angepassten Benachrichtigung.

 

Beispiel: JavaBean Tank mit Verwendung von java.beans.PropertyChangeSupport

In diesem Beispiel wird eine JavaBean verwendet, die einen Tank darstellt und eine gebundene Eigenschaft besitzt: level (Stand). Wenn der Stand (level) von Tank geändert wird, löst Tank das Ereignis PropertyChangeEvent aus, das vom Objekt TankController gesteuert wird.

Im Begleittext beschriebenes Diagramm.

 

Beispiel: Java-Bean Tank mit Verwendung der angepassten Benachrichtigung

Im folgenden Beispiel wird die Klasse Tank mit einem angepassten, effizienteren Benachrichtigungsmechanismus implementiert, der das Erstellen von Objekten während der Benachrichtigung vermeidet.

Im Begleittext beschriebenes Diagramm.