クラス java.beans.Beans は, 雑多なビーンズ制御メソッドをいくつか提供する。
メソッド isDesignTime 及びメソッド isGuiAvailable は, 振舞いを調整するために,ビーンが環境を試験することを可能にする。
ビーンには,クライアント GUI アプリケーション及び “不可視の”サーバアプリケションの両方で,実行されるものがあってもよい。 インタフェース java.beans.Visibility は,コンテナに対して, ビーンがサーバだけの環境にいるかどうかを,そのビーンに指示するようにさせる。
このインタフェースは,サーバ環境で違った振舞いを提供したいビーンだけが, サポートする必要がある。
ビーンは,直列化されたテンプレート(この場合には,ビーンのインスタンスを生成するためには, 非直列化をしなければならない。)又は実装クラス(この場合には,ビーンインスタンスは, 単に,クラスのインスタンスを生成することによって生成される。)のいずれかとして,配布可能とする。
プログラマが,単にクラスとして,ビーンを配布している場合には,“new”を使って, ビーンのインスタンスを生成できる。
JellyBean fred = new JellyBean();
しかし,クラス又は直列化されたテンプレートの可能性があるビーンを配置するために使用できる, ユティリティメソッド“Beans.instantiate”も提供する。 Beans.instantiate は,与えられた名前が, 直列化されたテンプレート又はクラスのいずれを表現するかを検査する。 それが直列化されたテンプレートを表現している場合は,Beans.instantiate は, 与えられた ClassLoader コンテキスト内の直列化された形式の読込みを処理する。
例えば,次の例示コードにおいて,対象 ClassLoader が,直列化されたテンプレートファイル “acme.widgets.PurpleMutantWombat.ser”をもつ場合,Beans.instantiate は, そのテンプレートからビーンを読み込む。そうでないときには,クラス “acme.widgets.PurpleMutantWombat”を探す。
ClassLoader cl = this.getClass().getClassLoader(); MutantWombat w = (MutantWombat)Beans.instantiate(cl, "acme.widgets.PurpleMutantWombat");
Beans.instantiate は,新たに生成されたビーンが Applet かどうかを検査し, アプレットならば,それに,デフォルトの Applet コンテキストを提供する。
一般に,プログラマはビーンズを生成するときに,Beans.instantiate を使うほうがよい。 (ただし,これを要求はしない。)これは,Beans.instantiate が, ビーンの実装されている方法及び初期化される方法からの分離を提供することによる。
実装者が Beans.instantiate を,う(迂)回することを選択する場合は, その機能を,注意してエミュレートしなければならない。 例えば,アプレットであるビーンズに対してアプレットコンテキストを提供する,などとする。
Beans 1.0では,各ビーンは,一つのJavaオブジェクトで表現する。 しかし,Java Beansの将来の版では, より複雑なビーンに対するサポートを付加する可能性がある。 この場合,Javaオブジェクトの集合は,一つのビーンの全部分とする, 様々に型付けされたビューの集合を提供するために協調する。
そのために,Java Bean が対象インタフェースをサポートするかどうか, 又はアプリケーションプログラムが Java Bean を対象インタフェースにキャストしたいかどうか, をそのアプリケーションプログラムが決定したい場合には,メソッド Beans.instanceOf 及び Beans.getInstanceOf の使用を要求する。 これらのメソッドは,Beans 1.0 では,単に,オペレータJava“instanceof” を使って実装されている。 しかし,Java Beans API の発展に伴い,変化するかもしれない。 そこで,開発者は,アプリケーションコードを将来の拡張機能で動作可能とするために, 現在から,これらのメソッドを使用することが望ましい。
ビーンが特定のAPIをサポートするかどうかを調べようとする場合の,通常の方法は, 次による。
DataseBaseAccessor x = getDBAccessor(); java.awt.Component y = null; if (Beans.isInstanceOf(x, java.awt.Component.class) { y = (java.awt.Component) Beans.getInstanceOf(x, java.awt.Component.class); }
public class java.beans.Beans extends java.lang.Object
このクラスは,一般的な目的のビーンズ制御メソッドを提供する。
public static Object getInstanceOf(Object bean, Class targetType)
与えたビーンから, そのソースオブジェクトの指定した型ビューを表示するオブジェクトを 獲得する。
結果は,同じオブジェクトになるかもしれないし, 異なるオブジェクトになるかもしれない。 要求した対象ビューが利用可能でない場合は,与えたビーンを返す。
このメソッドは,Beans 1.0では, 将来において,より柔軟なビーンの振舞いを付加可能とする準備として, 提供する。
仮引数:
public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException
ビーンをインスタンス化する。
ビーンは,クラスローダに相対的な名前に基づいて生成される。 この名前は,“a.b.c”などの,ドットで分離した名前がよい。
Beans 1.0 では,与えられた名前は,直列化されたオブジェクト, 又はクラスのどちらかを示すことができる。 将来的に,他の機構を追加するかもしれない。 Beans 1.0 では,最初に, beanName を直列化されたオブジェクトとして取り扱ってみて, 次に,クラス名として取り扱う。
beanName を直列化されたオブジェクトとして使用する場合には, 与えられた beanName を資源パス名に変換し,最後尾に,添字“.ser” を付加する。それから,その資源から, 直列化されたオブジェクトをロードしようとする。
例えば,“x.y”という beanName を与えた場合は, Beans.instantiate は,まず, 資源“x/y.ser”から直列化されたオブジェクトを読もうとする。 これが失敗した場合は,クラス“x.y”をロードし, そのクラスのインスタンスを生成しようとする。
ビーンが java.applet.Applet の部分型の場合は, 特定の初期化を行う。 最初に,デフォルトの AppletStub 及び AppletContext が提供される。 次に,そのビーンをクラス名から初期化した場合は, アプレットのメソッド“init”を呼び出す。 (ビーンが非直列化される場合は,この段階は省略する。)
アプレットであるビーンでは,アプレットの“start”を呼び出すのは, 呼出し側の責任とすることに注意。正しい振舞いのためには, アプレットが可視的 AWT コンテナに追加された後で, これを行うのが望ましい。
beans.instantiate 経由で生成されたアプレットは, ブラウザ内で実行するアプレットとは少し違った環境内で実行することに注意。 特に,ビーンアプレットは,“仮引数”へのアクセスをもたない。 そこで,仮引数値を設定するために, 特性取得メソッド及び特性設定メソッドを提供しようとするかもしれない。 ビーンアプレット開発者には,(参照ブラウザ環境用の)JDK appletviewer 及び(参照ビーンコンテナ用の)BDK BeanBox の両方で, ビーンアプレットを検査することを勧める。
仮引数:
public static boolean isDesignTime()
設計モードかどうかを検査する。
返却値:
public static boolean isGuiAvailable()
返却値:
public static boolean isInstanceOf(Object bean, Class targetType)
ビーンが与えられた対象の型として見えるかどうかを検査する。 指定した targetType の型ビューを表現するオブジェクトを獲得するために, 与えられたビーン上で, メソッド Beans.getInstanceOf を使用できる場合には,結果を真とする。
仮引数:
public static void setDesignTime(boolean isDesignTime) throws SecurityException
アプリケーションビルダ環境で実行しているかどうかを示すために使用する。 このメソッドは,セキュリティ検査をされ, (例えば,)信頼しないアプレットには利用可能でないことに注意すること。
仮引数:
public static void setGuiAvailable(boolean isGuiAvailable) throws SecurityException
GUI対話が利用可能な環境で実行しているかどうかを示すために使用する。 このメソッドは,セキュリティ検査をされ, (例えば,)信頼しないアプレットには利用可能でないことに注意すること。
仮引数:
public interface java.beans.Visibility
状況によっては,GUIを利用可能でないサーバ上で, ビーンは実行されるかもしれない。 このインタフェースは, ビーンが絶対にGUIを必要とするかどうか決定することをビーンに問い合わせ, ビーンにGUIが利用可能かどうかを助言するために使用できる。
このインタフェースは,専門の開発者用であって,
通常の単純なビーンに対しては必要としない。
エンドユーザを混乱させないために,これらのメソッドには,
getXXX 及び setXXX 設計パタンの使用を避ける。
public boolean avoidingGui()
返却値:
public void dontUseGui()
このメソッドは,ビーンが,GUIを使用しないほうがよいことを, ビーンに教示する。
public boolean needsGui()
返却値:
public void okToUseGui()
このメソッドは,GUIの使用が可能なことを,ビーンに教示する。