全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
java.lang.Object | +----java.beans.Introspector
上記の 3 種類の情報について、Introspector は bean のクラスとスーパークラスを別々に分析し、明白/暗黙的な情報を見つけ出し、その情報を使ってターゲット bean を包括的に記述する BeanInfo オブジェクトを構築します。
「Foo」 クラスでは、情報の問い合わせ時に null でない値を示す該当 「FooBeanInfo」 クラスがある場合、明白な情報を入手できます。まず最初にターゲット bean クラスの完全なパッケージ修飾名を取って 「BeanInfo」 を添えて新規のクラス名を作り、BeanInfo クラスを検索します。この処理が失敗した場合は、この完全なパッケージ修飾名の最後のクラス名にあたる部分を取り、BeanInfo パッケージ検索パスに指定のパッケージごとに該当クラスを検索します。
従って、例えば 「sun.xyz.OurButton」 というクラスでは、ます最初に 「sun.xyz.OurButtonBeanInfo」 という BeanInfo クラスを検索し、見つかられない場合は BeanInfo 検索パス内のパッケージごとに OurButtonBeanInfo クラスを検索します。
クラスが明白な BeanInfo を示す場合、分析クラスおよび発生クラスから獲得した BeanInfo 情報にこれを追加します。明白な情報は現在のクラスおよびそのベースクラスに関する最も信頼できる情報とみなすので、スーパークラスの連鎖についての検索はしません。
クラスの明白な BeanInfo が見つからない場合、低レベルのリフレクションを使ってクラスのメソッドを調べ、標準設計パターンを適用してプロパティのアクセス用メソッド、イベントソースメソッド、および public メソッドを識別します。次にクラスのスーパークラス分析を行い、この情報を追加します (スーパークラスの連鎖をさかのぼる可能性もあります)。
public static BeanInfo getBeanInfo(Class beanClass) throws IntrospectionException
public static BeanInfo getBeanInfo(Class beanClass, Class stopClass) throws IntrospectionException
public static String decapitalize(String name)
つまり、「FooBah」 は 「fooBah」、「X」 は 「x」 になりますが、「URL」 は変りません。
public static String[] getBeanInfoSearchPath()
最初は {"sun.beans.infos"} に設定されています。
public static void setBeanInfoSearchPath(String path[])
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス