BeanInfo クラスとイントロスペクション

Visual Editor 内で使用する新規コンポーネントまたは Bean を作成する (例えば、コンポーネントをパレットに追加する) 場合は、BeanInfo クラスを提供してそれらの振る舞いを制御できます。

BeanInfo クラスには java.beans.BeanInfo が実装され、Visual Editor は これを使用して、Bean に対する「プロパティー」ビューの振る舞いやカスタマイザーが使用可能であるかどうかを判別します。 Visual Editor には、共通 AWT および Swing 制御の BeanInfo クラスが組み込まれています。

BeanInfo クラスは設計時のみに必要な情報を持っているため、 通常 Bean クラス自身とは異なるプロジェクトに保持され、Bean が配置される時にはその情報は含まれません。 Visual Editor for Java は、BeanInfo クラスを、各 BeanInfo クラスが記述する Java Bean と関連付ける多くの規則を使用します。Visual Editor で検出可能な BeanInfo クラスを所有する Java Bean を使用している場合には、 これらの規則を理解する必要があります。 例えば、サード・パーティーの Java Bean クラスのセットを使用している場合、 または現在開発中であり、自身で開発する Java Bean および BeanInfo クラスを開発する場合は、 このケースに該当します。

BeanInfo クラスについて詳しく知るために、java.sun.com/products/javabeans/docs/ から JavaBeans 仕様をダウンロードできます。

背景

java.beans.Introspector クラスを使用して、Java Bean の BeanInfo クラスを配置します。これが行われた時刻はイントロスペクション として参照されます。 配置は Bean の初回使用時に Visual Editor によって行われます。例えば、ボタンが最初にパレットからドロップされると、 イントロスペクションは正しい BeanInfo クラスを見つけようとします。 Bean をイントロスペクトすると、その結果はパフォーマンスを良くするためにキャッシュされます。 ただし、BeanInfo クラスが変更されている可能性があり、キャッシュが不整合であることを Visual Editor が検出すると、イントロスペクションが再度実行されます。

Bean のイントロスペクションは、Bean クラスを引き数として getBeanInfo(Class) 静的メソッドを呼び出して行われます。例:

java.beans.Introspector.getBeanInfo(MyJavaBean.class)

イントロスペクターは、引き数 MyJavaBean クラスの BeanInfo クラスを見つけるために次のロジックを使用します。ここではいくつかのステップが順次進められ、どこかのステップで成功すると、イントロスペクターは検索を停止します。 ステップが失敗すると、Bean 情報を見つけるための別の方法を試みるために、次のステップに進み見ます。

クラスで BeanInfo クラスが見つかった場合は、イントロスペクターはそれを明示的には戻しません。 その代わりに、イントロスペクターは詳細情報を使用して、java.beans.BeanInfo を実装する一時的な結果クラスを作成します。

BeanInfo 検索パス

BeanInfo パスを知るには、イントロスペクションの実行のために作成される Java 仮想マシンを考慮することが最良の方法です。 この仮想マシンには、以下のエントリーで構成されるクラスパスが与えられます。

この仮想マシンが作成されていると、java.beans.Introspector には、public void setSearchPath(String[]) メソッドで BeanInfo クラスを検索するためのパッケージ・リストがあります。

以下はこのメソッドへの引き数です。

BeanInfo および継承する属性

作成する Bean がスーパー・クラスから属性を継承する場合、デフォルトの BeanInfo は継承属性を公開しません。 この場合は getAdditionalBeanInfo() メソッドを使用して、明示的に公開します。

例:

public BeanInfo[] getAdditionalBeanInfo() { 
try {  
         // The following will return all inherited features.  
         return new BeanInfo[] { 
Introspector.getBeanInfo(MyPanel.class.getSuperclass())};  
} catch (IntrospectionException e) {  
return new BeanInfo[0];  
} 

継承属性が公開されない場合、Visual Editor は、ソース・コードに設定されている場合であっても、その属性を提供しません。

親トピック: Visual Editor for Java の拡張

関連タスク
プラグイン開発者のための BeanInfo 情報の制御
BeanInfo クラスのロケーションの指定

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.