JavaTM Platform
Standard Ed. 6

java.beans
クラス Introspector

java.lang.Object
  上位を拡張 java.beans.Introspector

public class Introspector
extends Object

Introspector クラスは、ツールに対して、ターゲット Java Bean がサポートするプロパティー、イベント、メソッドを調べる標準的な手法を提供します。

Introspector は、上記の 3 種類の情報について、Bean のクラスとスーパークラスを別々に分析し、明示的あるいは暗示的な情報を見つけ出し、その情報を使ってターゲットの Bean を包括的に記述する BeanInfo オブジェクトを構築します。

Foo クラスについては、情報の問い合わせ時に null 以外の値を提供する FooBeanInfo クラスがあれば、明示的な情報を取得できます。まず、ターゲットの Bean クラスの完全指定されたパッケージ名に「BeanInfo」を付加して新規のクラス名とし、BeanInfo クラスを検索します。これに失敗した場合は、この完全指定されたパッケージ名の最後のクラス名にあたる部分を使って、BeanInfo パッケージ検索パスに指定されたパッケージごとに該当クラスを検索します。

このように、たとえば sun.xyz.OurButton というクラスの場合、まず sun.xyz.OurButtonBeanInfo という BeanInfo クラスを検索し、見つからない場合は BeanInfo 検索パス内のパッケージごとに OurButtonBeanInfo クラスを検索します。デフォルトの検索パスの場合は sun.beans.infos.OurButtonBeanInfo になります。

クラスが明示的な BeanInfo を提供する場合は、これを分析クラスおよび派生クラスから取得した BeanInfo 情報に追加します。明示的な情報は、現在のクラスとその基底クラスに関する信頼できる情報と見なせるので、スーパークラスの連鎖の検索は行いません。

クラスの明示的な BeanInfo が見つからない場合は、低レベルのリフレクションを使ってクラスのメソッドを調べ、標準設計パターンを適用して、プロパティーのアクセス用メソッド、イベントソースメソッド、public メソッドを識別します。次に、クラスのスーパークラスを分析し、この情報を追加します。このとき、スーパークラスの連鎖をさかのぼる可能性もあります。

Introspector は、パフォーマンスの向上の目的で BeanInfo クラスをキャッシュするため、複数のクラスローダーを使用するアプリケーションで Introspector を使用する場合は注意してください。一般に、クラスのイントロスペクションを実行するために使用した ClassLoader を破棄するときは、Introspector.flushCaches または Introspector.flushFromCaches メソッドを使用して、イントロスペクションされたすべてのクラスをキャッシュからフラッシュするようにしてください。

イントロスペクションおよび設計パターンの詳細については、「JavaBeans specification」を参照してください。


フィールドの概要
static int IGNORE_ALL_BEANINFO
           
static int IGNORE_IMMEDIATE_BEANINFO
           
static int USE_ALL_BEANINFO
           
 
メソッドの概要
static String decapitalize(String name)
          文字列を引数に取り、通常の Java 変数名の大文字使用法に従って変換するユーティリティーメソッドです。
static void flushCaches()
          Introspector の内部キャッシュをすべてフラッシュします。
static void flushFromCaches(Class<?> clz)
          指定されたクラスに関する Introspector の内部キャッシュ情報をフラッシュします。
static BeanInfo getBeanInfo(Class<?> beanClass)
          Java Bean のイントロスペクションを行い、すべてのプロパティー、公開メソッド、イベントについて調べます。
static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass)
          Java Bean のイントロスペクションを行い、指定された「停止」ポイントに達するまで、プロパティー、公開されたメソッドを調べます。
static BeanInfo getBeanInfo(Class<?> beanClass, int flags)
          いくつかの制御フラグに従って、Java Bean のイントロスペクションを行い、すべてのプロパティー、公開されたメソッド、イベントについて調べます。
static String[] getBeanInfoSearchPath()
          BeanInfo クラスの検索に使用するパッケージ名のリストを取得します。
static void setBeanInfoSearchPath(String[] path)
          BeanInfo クラスの検索に使用されるパッケージ名のリストを変更します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

USE_ALL_BEANINFO

public static final int USE_ALL_BEANINFO
関連項目:
定数フィールド値

IGNORE_IMMEDIATE_BEANINFO

public static final int IGNORE_IMMEDIATE_BEANINFO
関連項目:
定数フィールド値

IGNORE_ALL_BEANINFO

public static final int IGNORE_ALL_BEANINFO
関連項目:
定数フィールド値
メソッドの詳細

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass)
                            throws IntrospectionException
Java Bean のイントロスペクションを行い、すべてのプロパティー、公開メソッド、イベントについて調べます。

この Java Bean の BeanInfo クラスに対してイントロスペクションを実行したことがある場合、BeanInfo キャッシュから BeanInfo クラスを取得できます。

パラメータ:
beanClass - 分析される Bean クラス
戻り値:
ターゲット Bean を記述する BeanInfo オブジェクト
例外:
IntrospectionException - イントロスペクション中に例外が発生した場合
関連項目:
flushCaches(), flushFromCaches(java.lang.Class)

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass,
                                   int flags)
                            throws IntrospectionException
いくつかの制御フラグに従って、Java Bean のイントロスペクションを行い、すべてのプロパティー、公開されたメソッド、イベントについて調べます。

この Java Bean の BeanInfo クラスに対して、同じ引数を使ってイントロスペクションを実行したことがある場合、BeanInfo キャッシュから BeanInfo クラスを取得できます。

パラメータ:
beanClass - 分析される Bean クラス
flags - イントロスペクションを制御するためのフラグ。flags == USE_ALL_BEANINFO の場合、見つかったすべての BeanInfo クラスを使用する。flags == IGNORE_IMMEDIATE_BEANINFO の場合、指定された beanClass の BeanInfo をすべて無視するflags == IGNORE_ALL_BEANINFO の場合、指定された beanClass またはそのすべての親クラスの BeanInfo をすべて無視する
戻り値:
ターゲット Bean を記述する BeanInfo オブジェクト
例外:
IntrospectionException - イントロスペクション中に例外が発生した場合

getBeanInfo

public static BeanInfo getBeanInfo(Class<?> beanClass,
                                   Class<?> stopClass)
                            throws IntrospectionException
Java Bean のイントロスペクションを行い、指定された「停止」ポイントに達するまで、プロパティー、公開されたメソッドを調べます。

この Java Bean の BeanInfo クラスに対して、同じ引数を使ってイントロスペクションを実行したことがある場合、BeanInfo キャッシュから BeanInfo クラスを取得できます。

パラメータ:
beanClass - 分析される Bean クラス
stopClass - 分析を停止する基底クラス。stopClass またはその基底クラスに含まれるメソッド、プロパティー、イベントは、分析処理ではすべて無視される
例外:
IntrospectionException - イントロスペクション中に例外が発生した場合

decapitalize

public static String decapitalize(String name)
文字列を引数に取り、通常の Java 変数名の大文字使用法に従って変換するユーティリティーメソッドです。通常は最初の文字を大文字から小文字に変換しますが、この変換を行わない特殊なケースもあります (複数の文字が存在し、先頭の文字と 2 番目の文字がどちらも大文字である場合など)。

たとえば、「FooBah」は「fooBah」、「X」は「x」に変換されますが、「URL」は変換されません。

パラメータ:
name - 小文字に変換される文字列
戻り値:
小文字に変換された文字列

getBeanInfoSearchPath

public static String[] getBeanInfoSearchPath()
BeanInfo クラスの検索に使用するパッケージ名のリストを取得します。

戻り値:
BeanInfo クラスの検索に使用されるパッケージ名の配列。この配列のデフォルト値は、実装によって異なる。Sun の実装での初期設定は {"sun.beans.infos"}

setBeanInfoSearchPath

public static void setBeanInfoSearchPath(String[] path)
BeanInfo クラスの検索に使用されるパッケージ名のリストを変更します。パラメータパスが null の場合、このメソッドの動作は未定義です。  

セキュリティーマネージャーが存在する場合、最初に、その checkPropertiesAccess メソッドが呼び出されます。この結果、SecurityException がスローされることがあります。

パラメータ:
path - パッケージ名の配列
例外:
SecurityException - セキュリティマネージャーが存在し、セキュリティマネージャーの checkPropertiesAccess メソッドがシステムプロパティーの設定を許可しない場合
関連項目:
SecurityManager.checkPropertiesAccess()

flushCaches

public static void flushCaches()
Introspector の内部キャッシュをすべてフラッシュします。通常、このメソッドは不要です。このメソッドが必要とされるのは、拡張ツールが既存の配置済み Class オブジェクトを更新し、Introspector に既存の Class オブジェクトを再分析させる必要が生じた場合だけです。


flushFromCaches

public static void flushFromCaches(Class<?> clz)
指定されたクラスに関する Introspector の内部キャッシュ情報をフラッシュします。通常、このメソッドは不要です。このメソッドが必要とされるのは、拡張ツールが既存の配置済み Class オブジェクトを更新し、Introspector に既存の Class オブジェクトを再分析させる必要が生じた場合だけです。 フラッシュされるのは、ターゲット Class オブジェクトに関連した直接の状態だけです。同じ名前を持つほかの Class オブジェクトの状態や、関連する Class オブジェクト (サブクラスなど) の状態は、フラッシュされません。それらの状態にターゲット Class オブジェクトから間接的に取得された情報が格納されている場合も同様です。

パラメータ:
clz - フラッシュされる Class オブジェクト
例外:
NullPointerException - Class オブジェクトが null の場合

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。