概念: JavaBean
トピック
概論
JavaBeans は単純で強力な Java のコンポーネント・モデルを定義します。JavaBeans の目的は、開発者がプログラム的に操作したりビルダー・ツールで視覚的に操作したりできる独立した再利用可能なユニットを提供することです。
JavaBeans は、GUI コントロールである場合と、視覚的な表現がない場合とがあります。Java での GUI コントロールは、一般に、ビルダー・ツールでの操作用の JavaBean です。J2EE では、単純な JavaBeans は JSP から共有して使用されます。これにより、HTML 内のプレゼンテーションと JavaBeans に含まれる Java コードとが分離されます。
JavaBeans は次の 3 種類の機能を持った Java クラスです。
JavaBean のプロパティー
JavaBean のプロパティーは、ほかのコンポーネントからアクセスできます。一般に、プロパティーは、setter と getter メソッドを介してアクセスされる private 値ですが、computed 値も使用できます。プロパティーの更新にはさまざまな影響があります。
アクセサーは、プロパティー・アクセス用のメソッドです。アクセサーは getter と setter であり、次の命名規則に従います。
void setPropertyName(PropertyType value); // setter
PropertyType getPropertyName() // getter
論理型プロパティーに対しては、getter は次のとおりです。
boolean isPropertyName()
// getter for a boolean property
例: Customer Bean
次に 2 つの単純なプロパティー (name と email) を持つ単純な JavaBean (Customer) の例を示します。プロパティーが set/get メソッドのペアを介して定義される方法に注目してください。

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;
}
}
このように単純な JavaBeans は、JSP で使用される場合が多く、Web ページ上のフォームからの値の転送を可能にします。
索引付きプロパティー
単一の値を持つ単純なプロパティー以外に、配列に含まれる値のセットを持つプロパティーも使用できます。
索引付きプロパティーは、指定された索引での値を返すか、値の配列全体を返します。
索引付きプロパティーには、次のシグニチャーがあります。
void setPropertyName(int
index, PropertyType value); // indexed setter
PropertyType getter(int index); // indexed getter
void setPropertyName(PropertyType values[]); // array setter
PropertyType[]getPropertyName(); // array getter
バウンド・プロパティー
バウンド・プロパティーのメカニズムは、プロパティーに変更があった際の通知サービスを提供します。変更の通知を受けたいオブジェクトは事前に自分自身を登録し、プロパティーに変更があった際、登録されたオブジェクトに通知が送られます。通常、この通知は、プロパティーが設定された後に、バウンド・プロパティーを持つコンポーネントで発行されるイベントを介して行われます。
バウンド・プロパティーを持つ JavaBean は、リスナーと呼ばれる対象オブジェクトの登録と登録解除のメソッドを公開します。開発者は独自の通知メカニズムを定義できますが、Java ライブラリーでは、共有して使用される多くのサポート・クラスを java.beans パッケージで提供しています。
制約プロパティー
制約プロパティーは、バウンド・プロパティーに類似していますが、プロパティーが実際に設定される前に通知が発生します。これにより、対象のパーティーは PropertyVetoException をスローすることによって、プロパティーの変更を拒否できます。
イベントと通知
イベントは、状態変更の情報を伝達し合うことによって、独立して開発されたコンポーネントがお互いに通信できるようにする JavaBeans の機能です。このモデルでは、ほかのコンポーネントがイベント・リスナーのロールで処理するイベントを発行するコンポーネントもあります。
この通信モデルをサポートするために、JavaBeans コンポーネント・モデルは次を提供します。
- イベントを発行できるプロパティー (バウンドおよび制約プロパティー)
- リスナーが自分自身を登録できる登録メソッド
- 変更の情報を伝達するイベント
- 伝達されたイベントに対応できるリスナー
次のクラス図は、単純な int プロパティーを持つ EventSource と呼ばれる JavaBean でのこれらの概念を示しています。

構成の間、具象リスナーは JavaBean に登録します。その後、ほかのオブジェクトが setProperty メソッドを呼び出すと、イベント・オブジェクトの作成によって通知プロセスが開始されます。EventSource JavaBean は、登録されたすべてのリスナー上で propertyChange メソッドを呼び出します。イベント・リスナーは、イベントを受け取り、値を参照し、イベントに対応します。
次のシーケンス図は、呼び出しの順序を示しています。

リスナーの通知は、イベントのソースである JavaBean インスタンスと同期していますが、イベント・リスナーは別のスレッドでイベントの処理を実行できます。
イントロスペクション
イントロスペクションは、JavaBean のプロパティー、イベント、メソッドを検出できる実行時メカニズムです。イントロスペクションは、導入ツールと、ほかのコンポーネント上でのハードコーディングの依存関係を使用しないプログラムによって使用されます。イントロスペクションは、リフレクションと、メソッドとインターフェースの命名規則のセットによって実現されます。イントロスペクションの追加の機能は BeanInfo クラスでサポートされます。イントロスペクションで使用される JavaBeans の命名規則は、「設計パターン」と呼ばれることもありますが、オブジェクト指向設計の設計パターンの概念と混同しないでください。
永続性
JavaBean は、シリアライズのメカニズムにより永続化できます。シリアライズは、自動またはカスタムであり、JavaBean が Serializable または Externalizable のどちらのインターフェースを実装しているかに依存します。JDK 1.4 では、XML フォーマットでの JavaBeans インスタンスの格納を提供する XMLEncoder および XMLDecoder クラスが導入されました。
カスタマイゼーション
JavaBean の表示と振る舞いは、設計時にカスタマイズできます。これは、グラフィカル・ユーザー・インターフェースで使用される視覚的な JavaBeans では特に重要です。カスタマイゼーションは、プロパティー・エディターまたはカスタマイザーを使用して実行されます。カスタマイザーは、設計時に JavaBean インスタンス構成のためのカスタム・ユーザー・インターフェースを提供します。
BeanContext
BeanContext は、論理的な包含階層を定義し、それによって JavaBean は機能やサービスについて環境に問い合わせできます。BeanContext メカニズムは、JavaBeans の論理的な包含階層のサポートと、階層で JavaBeans によって提供されるサービスのルックアップのサポートを提供します。
JavaBeans™ Activation Framework
Java Activation Framework は、Java の標準拡張であり、あるデータのタイプの決定、そのカプセル化、使用可能な操作の検出、そのデータ上で期待される操作に関連するソフトウェア・コンポーネントのインスタンス化を可能にします。
詳細情報
JavaBeans について詳しくは、http://java.sun.com/ の「JavaBeans API Specification」のバージョン 1.01 を参照してください。「Docs & Training」、「Java 2 Platform, Standard Edition」、「Java 2 SDK, SE v1.3 documentation」、「JavaBeans」、「JavaBeans Specification」のリンクに従って参照してください。
|