Zum Inhalt springen

„JavaBeans“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Tippfehler in "Java ist auch eine Insel"-Weblink korrigiert
Weblinks: Auf der Seite taucht das Wort JavaBeans nicht auf.
 
(30 dazwischenliegende Versionen von 26 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''JavaBeans''' sind [[Komponente (Software)|Software-Komponenten]] für die Programmiersprache [[Java (Programmiersprache)|Java]]. JavaBeans entwickelten sich aus der Notwendigkeit heraus, [[Graphical User Interface|GUI]]-Klassen ([[Abstract Window Toolkit|AWT]], [[Swing (Java)|Swing]]) einfach [[Instanziierung|instanziieren]] ([[Reflexion (Programmierung)|Reflexion]]) und übertragen ([[Remote Method Invocation|RMI]]) zu können. JavaBeans werden auch als Container zur Datenübertragung verwendet. Daher zeichnen sich alle JavaBeans durch folgende Eigenschaften aus:
'''JavaBeans''' sind [[Komponente (Software)|Software-Komponenten]] für die Programmiersprache [[Java (Programmiersprache)|Java]]. JavaBeans entwickelten sich aus der Notwendigkeit heraus, [[Graphical User Interface|GUI]]-Klassen ([[Abstract Window Toolkit|AWT]], [[Swing (Java)|Swing]]) einfach zu [[Objekt (Programmierung)#Instanziierung|instanziieren]] und mittels [[Remote Method Invocation|RMI]] zu übertragen. JavaBeans werden auch als Container zur Datenübertragung verwendet. Daher zeichnen sich alle JavaBeans durch folgende Eigenschaften aus:


* Öffentlicher [[Konstruktor|Standardkonstruktor]] (Default constructor)
* Öffentlicher parameterloser [[Konstruktor]]
* [[Serialisierung|Serialisierbarkeit]] (Serializable)
* [[Serialisierung|Serialisierbarkeit]] (Serializable)
* Öffentliche [[Zugriffsfunktion|Zugriffsmethoden]] (Public Getters/Setters)
* Öffentliche [[Zugriffsfunktion#JavaBeans|Zugriffsmethoden]] (Public Getters/Setters)


Auf Grund dieser Eigenschaften eignen sich JavaBeans auch als Datenobjekte für [[Persistenz (Informatik)|Persistenzframeworks]] (siehe [[Enterprise JavaBeans]]).
Auf Grund dieser Eigenschaften eignen sich JavaBeans auch als Datenobjekte für [[Persistenz (Informatik)|Persistenzframeworks]] ''(siehe [[Enterprise JavaBeans]])''.


== Überblick ==
== Überblick ==
Eine JavaBean ist eine Java-[[Klasse (Programmierung)|Klasse]], die einem [[Komponentenmodell]] entspricht, um automatisierten Zugriff auf ihre Eigenschaften ([[Membervariable]]n) und Operationen ([[Methode (Programmierung)|Methoden]]) zu erlauben. Das Java-[[Software Development Kit|SDK]] stellt Anwendungsentwicklern die Bean-[[Application Programming Interface|API]] (das Paket <code>java.beans</code>) zur Verfügung, um beispielsweise eine Kurzbeschreibung einer Bean anzuzeigen. Das JavaBean-Komponentenmodell wurde vor allem entwickelt, um eine einheitliche API zur einfacheren Entwicklung von GUI-Buildern bereitzustellen. Beans realisieren eine verbesserte Serialisierung und damit Netzwerkfähigkeit, [[Wiederverwendbarkeit]], [[Plattformunabhängigkeit|Portabilität]] und [[Interoperabilität]].


Eine Komponente ist nur dann eine JavaBean, wenn sie der ''JavaBeans API Specification'' entspricht, die von der ''JavaBeans Component Architecture'' spezifiziert wird.
Eine JavaBean ist eine Java-[[Klasse (objektorientierte Programmierung)|Klasse]], die einem [[Komponentenmodell]] entspricht, um automatisierten Zugriff auf ihre Eigenschaften ([[Membervariable]]n) und Operationen zu erlauben. Das Java-[[Software Development Kit|SDK]] stellt Anwendungsentwicklern die Bean-[[Application Programming Interface|API]] (das Paket java.beans) zur Verfügung, um beispielsweise eine Kurzbeschreibung einer Bean anzuzeigen. Das JavaBean-Komponentenmodell wurde vor allem entwickelt, um eine einheitliche API zur einfacheren Entwicklung von GUI-Buildern bereitzustellen. Beans realisieren eine verbesserte Serialisierung und damit Netzwerkfähigkeit, [[Wiederverwendbarkeit]], [[Plattformunabhängigkeit|Portabilität]] und [[Interoperabilität]].

Eine Komponente ist nur dann eine JavaBean, wenn sie der ''JavaBeans API Specification'' entspricht, welche die ''JavaBeans Component Architecture'' spezifiziert.


== Instanziierung ==
== Instanziierung ==
Eine JavaBean besitzt immer einen [[Konstruktor]] ohne Parameter (Standardkonstruktor). Dies ermöglicht eine standardisierte Instanziierung, beispielsweise einer [[Schaltfläche]]:


<syntaxhighlight lang="java">
Eine JavaBean besitzt immer einen [[Konstruktor]] ohne Argumente (Standardkonstruktor). Dies ermöglicht eine standardisierte Instanziierung, beispielsweise einer [[Schaltfläche]]:

<source lang="java">
JButton button = (JButton) Class.forName("javax.swing.JButton").newInstance();
JButton button = (JButton) Class.forName("javax.swing.JButton").newInstance();
</syntaxhighlight>
</source>


Eine Alternative dieser Instanziierung funktioniert wie folgt:
Eine Alternative dieser Instanziierung ist:

<source lang="java">
<syntaxhighlight lang="java">
JButton button = new JButton();
JButton button = new JButton();
</syntaxhighlight>
</source>


== Zugriffsoperationen ==
== Zugriffsoperationen ==
Alle ''Eigenschaften'' einer Bean wahren das [[Datenkapselung (Programmierung)|Geheimnisprinzip]] ''(information hiding)''. Der Zugriff ist über spezielle Operationen möglich, die bestimmten Konventionen entsprechen müssen.


Für eine Eigenschaft <code>foo</code> heißt die lesende Operation ''(Getter)'' <code>getFoo</code>. Bei booleschen Variablen ist alternativ auch <code>isFoo</code> möglich, was allgemein vorgezogen wird. Die schreibende Operation ''(Setter)'' heißt <code>setFoo</code>. Indizierte Eigenschaften besitzen jeweils zwei Getter und Setter: Einen für die Gesamtheit, einen für einen bestimmten Index. Eine schreibgeschützte Eigenschaft besitzt keinen (öffentlichen) Setter.
Alle ''Eigenschaften'' einer Bean wahren das [[Datenkapselung (Programmierung)|Geheimnisprinzip]] ''([[Datenkapselung_(Programmierung)|information hiding]])''. Der Zugriff ist über spezielle Operationen möglich, die bestimmten Konventionen entsprechen müssen.

Für eine Eigenschaft <code>foo</code> heißt die lesende Operation ''(„Getter“)'' <code>getFoo</code>. Bei booleschen Variablen ist alternativ auch <code>isFoo</code> möglich, was allgemein vorgezogen wird. Die schreibende ''(„Setter“)'' Operation heißt <code>setFoo</code>. Indizierte Eigenschaften besitzen jeweils zwei Getter und Setter: Einen für die Gesamtheit, einen für einen bestimmten Index. Eine schreibgeschützte Eigenschaft besitzt keinen (öffentlichen) Setter.


== Introspektion ==
== Introspektion ==
[[Introspektion (Informatik)|Introspektion]] ist der Mechanismus, eine Bean auf ihre Eigenschaften, [[Ereignis (Programmierung)|Ereignisse]] (Events) und Operationen zu analysieren. Die API bietet dabei Möglichkeiten, die eine zusätzliche Unterstützung zur Introspektion von Seiten des Bean-Entwicklers unnötig machen. Beans können per [[Reflexion (Programmierung)|Reflexion]] untersucht werden, wenn sie sich an die in der [[Java Specification Request|Spezifikation]] definierten Konventionen halten.
[[Reflexion (Programmierung)|Introspektion]] ist der Mechanismus, eine Bean auf ihre Eigenschaften, [[Ereignis (Programmierung)|Ereignisse]] ''(Events)'' und Operationen zu analysieren. Die API bietet dabei Möglichkeiten, die eine zusätzliche Unterstützung zur Introspektion von Seiten des Bean-Entwicklers unnötig machen. Beans können per [[Reflexion (Programmierung)|Reflexion]] untersucht werden, wenn sie sich an die in der [[Java Specification Request|Spezifikation]] definierten Konventionen halten.


Ferner gibt es die Möglichkeit, für jede Bean eine BeanInfo-Klasse zu schreiben, die Informationen über die Bean, ihre Eigenschaften und Operationen enthält. Die Klasse ''Introspector'' sucht erst nach expliziten Informationen und vervollständigt diese durch Reflexion.
Ferner gibt es die Möglichkeit, für jede Bean eine BeanInfo-Klasse zu schreiben, die Informationen über die Bean, ihre Eigenschaften und Operationen enthält. Die Klasse <code>java.beans.Introspector</code> sucht erst nach expliziten Informationen und vervollständigt diese durch Reflexion.


== Weiteres ==
== Weiteres ==
Bei der Änderung einer ''Bound Property'' (gebundene Eigenschaft) müssen Objekte über die Änderung informiert werden. Bei ''Constrained Properties'' können diese zudem ein ''Veto'' einlegen. Die Bean-API stellt hierfür ein ''Event Delegation Model'' bereit.


Bei der Änderung einer ''Bound Property'' (gebundene Eigenschaft) müssen Objekte über die Änderung informiert werden. Bei ''Constrained Properties'' können diese zudem ein ''Veto'' einlegen. Die Bean-API stellt hierfür ein ''Event Delegation Model'' bereit.
Es können grafische ''Editoren'' und ''Customizer'' für bestimmte [[Datentyp]]en und Beans erstellt und durch sie Eigenschaften bequem angepasst werden.
Es können grafische ''Editoren'' und ''Customizer'' für bestimmte [[Datentyp]]en und Beans erstellt und durch sie Eigenschaften bequem angepasst werden.


Es gibt einen Persistenzmechanismus für Beans. So können Beans beispielsweise als [[Extensible Markup Language|XML]]-Dokument gespeichert werden.
Es gibt einen Persistenzmechanismus für Beans. So können Beans beispielsweise als [[Extensible Markup Language|XML]]-Dokument gespeichert werden.

Um eine Java-Bean für einen visuellen [[Editor (Software)|Editor]] einsatzfähig zu machen, muss die Class-Datei in eine [[Java Archive|jar]]-Datei gepackt werden, die auch eine [[Java Archive#Manifest|Manifest-Datei]] (.mf) enthalten muss.


== Literatur ==
== Literatur ==
* Olaf Zwintzscher: ''Software-Komponenten im Überblick.'' W3L 2004, ISBN 3-937137-60-2
* Olaf Zwintzscher: ''Software-Komponenten im Überblick.'' W3L, 2004, ISBN 3-937137-60-2


== Weblinks ==
== Weblinks ==
* [http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html ''JavaBeans API Specification'']

* [http://java.sun.com/products/javabeans/docs/spec.html ''JavaBeans API Specification'']
* [http://www.intermitto.net/entwicklung/jinbean/ Diplomarbeit ''JinBean Java GUI Builder – Konzepte und Realisierung''] Viele der genannten Informationen sind dieser Arbeit entnommen
* [http://www.intermitto.net/entwicklung/jinbean/ Diplomarbeit ''JinBean Java GUI Builder – Konzepte und Realisierung''] Viele der genannten Informationen sind dieser Arbeit entnommen
* [http://openbook.galileocomputing.de/javainsel/javainsel_10_003.html JavaBean]. Kapitel aus 'Java ist auch eine Insel'

[[Kategorie:Programmiersprache Java]]


[[Kategorie:Java (Programmiersprache)]]
[[ca:JavaBeans]]
[[cs:Java Bean]]
[[en:JavaBean]]
[[es:JavaBean]]
[[fi:JavaBean]]
[[fr:JavaBeans]]
[[it:JavaBean]]
[[ja:JavaBeans]]
[[ko:자바빈즈]]
[[nl:JavaBeans]]
[[pl:JavaBeans]]
[[pt:JavaBeans]]
[[ru:JavaBeans]]
[[th:จาวาบีนส์]]
[[uk:JavaBeans]]

Aktuelle Version vom 9. Oktober 2023, 14:13 Uhr

JavaBeans sind Software-Komponenten für die Programmiersprache Java. JavaBeans entwickelten sich aus der Notwendigkeit heraus, GUI-Klassen (AWT, Swing) einfach zu instanziieren und mittels RMI zu übertragen. JavaBeans werden auch als Container zur Datenübertragung verwendet. Daher zeichnen sich alle JavaBeans durch folgende Eigenschaften aus:

Auf Grund dieser Eigenschaften eignen sich JavaBeans auch als Datenobjekte für Persistenzframeworks (siehe Enterprise JavaBeans).

Eine JavaBean ist eine Java-Klasse, die einem Komponentenmodell entspricht, um automatisierten Zugriff auf ihre Eigenschaften (Membervariablen) und Operationen (Methoden) zu erlauben. Das Java-SDK stellt Anwendungsentwicklern die Bean-API (das Paket java.beans) zur Verfügung, um beispielsweise eine Kurzbeschreibung einer Bean anzuzeigen. Das JavaBean-Komponentenmodell wurde vor allem entwickelt, um eine einheitliche API zur einfacheren Entwicklung von GUI-Buildern bereitzustellen. Beans realisieren eine verbesserte Serialisierung und damit Netzwerkfähigkeit, Wiederverwendbarkeit, Portabilität und Interoperabilität.

Eine Komponente ist nur dann eine JavaBean, wenn sie der JavaBeans API Specification entspricht, die von der JavaBeans Component Architecture spezifiziert wird.

Eine JavaBean besitzt immer einen Konstruktor ohne Parameter (Standardkonstruktor). Dies ermöglicht eine standardisierte Instanziierung, beispielsweise einer Schaltfläche:

JButton button = (JButton) Class.forName("javax.swing.JButton").newInstance();

Eine Alternative dieser Instanziierung ist:

JButton button = new JButton();

Zugriffsoperationen

[Bearbeiten | Quelltext bearbeiten]

Alle Eigenschaften einer Bean wahren das Geheimnisprinzip (information hiding). Der Zugriff ist über spezielle Operationen möglich, die bestimmten Konventionen entsprechen müssen.

Für eine Eigenschaft foo heißt die lesende Operation (Getter) getFoo. Bei booleschen Variablen ist alternativ auch isFoo möglich, was allgemein vorgezogen wird. Die schreibende Operation (Setter) heißt setFoo. Indizierte Eigenschaften besitzen jeweils zwei Getter und Setter: Einen für die Gesamtheit, einen für einen bestimmten Index. Eine schreibgeschützte Eigenschaft besitzt keinen (öffentlichen) Setter.

Introspektion ist der Mechanismus, eine Bean auf ihre Eigenschaften, Ereignisse (Events) und Operationen zu analysieren. Die API bietet dabei Möglichkeiten, die eine zusätzliche Unterstützung zur Introspektion von Seiten des Bean-Entwicklers unnötig machen. Beans können per Reflexion untersucht werden, wenn sie sich an die in der Spezifikation definierten Konventionen halten.

Ferner gibt es die Möglichkeit, für jede Bean eine BeanInfo-Klasse zu schreiben, die Informationen über die Bean, ihre Eigenschaften und Operationen enthält. Die Klasse java.beans.Introspector sucht erst nach expliziten Informationen und vervollständigt diese durch Reflexion.

Bei der Änderung einer Bound Property (gebundene Eigenschaft) müssen Objekte über die Änderung informiert werden. Bei Constrained Properties können diese zudem ein Veto einlegen. Die Bean-API stellt hierfür ein Event Delegation Model bereit.

Es können grafische Editoren und Customizer für bestimmte Datentypen und Beans erstellt und durch sie Eigenschaften bequem angepasst werden.

Es gibt einen Persistenzmechanismus für Beans. So können Beans beispielsweise als XML-Dokument gespeichert werden.