JavaA2Z

KAB-studio > プログラミング > JavaA2Z > イントロスペクションとは

イントロスペクション

日本語 内省
英語 introspection
ふりがな いんとろすぺくしょん
フリガナ イントロスペクション

解説

JavaBeansプロパティを取得すること、もしくは取得できること。
JavaBeansは、使用する側が動的に「どのようなプロパティを持っているのか」を取得し、得られた情報を元にプロパティgetter/setterを使用してアクセスする必要がある。
この「プロパティの情報を取得できる」ことを「イントロスペクション」と呼ぶ。もしくは「プロパティの情報を取得する」ことを「イントロスペクションする」と言う。
 
特定のJava Beanクラスをイントロスペクションする場合、Introspectorクラスを使用する。
IntrospectorクラスのgetBeanInfo()staticメソッドを使用することで、プロパティについての情報を持つBeanInfoインターフェイスを取得し、そこからgetter/setterメソッドを取得することができる。
 
通常、Introspectorクラスリフレクションを用いてプロパティの情報を取得し、BeanInfoインターフェイス実装クラスに持たせる。
つまり、「イントロスペクション」を実現する手段のひとつが「リフレクション」ということになる。
 
一応、あるクラスJava Beanであるためには「イントロスペクションがえる」必要がある。
ただし、通常はリフレクションが代わりにイントロスペクション用の情報を提供してくれるため、意識して実装する必要はないだろう。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// src/bean/SampleBean.java
package bean;
// Java Beanは、JSPで使用する関係でパッケージに入れる必要があります。
// ここではbeanパッケージに入れます。

// 一応、Java Beanは直列化可能にする必要があります。
// 実際には必要ない場合も多いですが。
import java.io.Serializable;

/**
*   Sampleクラスで使用するJava Beanクラスです。
*/
public class SampleBean implements Serializable
{
    /**
    *    プロパティ。
    */
    private int data;

    /**
    *   コンストラクタ。
    */
    public SampleBean()
    {
        data = 0;
    }

    /**
    *    プロパティのgetter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    プロパティのsetter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}


// Sample.java
import java.beans.Introspector;
import java.beans.BeanInfo;
import java.beans.PropertyDescriptor;
import java.beans.IntrospectionException;

import bean.SampleBean;

public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // SampleBeanクラスの情報を取得します。
            BeanInfo beanInfo = Introspector.getBeanInfo( SampleBean.class );
            // SampleBeanクラスのプロパティ全てを取得します。
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            // プロパティそれぞれの、getter/setterを出力します。
            forint iF1 = 0; iF1 < propertyDescriptors.length; ++iF1 )
            {
                System.out.println( propertyDescriptors[iF1].getReadMethod() );
                System.out.println( propertyDescriptors[iF1].getWriteMethod() );
            }
            // public final native java.lang.Class java.lang.Object.getClass()
            // null
            // public int bean.SampleBean.getData()
            // public void bean.SampleBean.setData(int)
        }
        catch( IntrospectionException e )
        {
            // IntrospectorクラスのgetBeanInfo()メソッドで例外が発生した場合
            // (JavaBeansじゃない場合とか)にはIntrospectionException例外が
            // 投げられます。
            e.printStackTrace();
        }
    }
}
// src/bean/SampleBean.java
package bean;
// Java Beanは、JSPで使用する関係でパッケージに入れる必要があります。
// ここではbeanパッケージに入れます。

// 一応、Java Beanは直列化可能にする必要があります。
// 実際には必要ない場合も多いですが。
import java.io.Serializable;

/**
*   Sampleクラスで使用するJava Beanクラスです。
*/
public class SampleBean implements Serializable
{
    /**
    *    プロパティ。
    */
    private int data;

    /**
    *   コンストラクタ。
    */
    public SampleBean()
    {
        data = 0;
    }

    /**
    *    プロパティのgetter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    プロパティのsetter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}


// Sample.java
import java.beans.Introspector;
import java.beans.BeanInfo;
import java.beans.PropertyDescriptor;
import java.beans.IntrospectionException;

import bean.SampleBean;

public class Sample
{
    public static void main( String[] args )
    {
        try
        {
            // SampleBeanクラスの情報を取得します。
            BeanInfo beanInfo = Introspector.getBeanInfo( SampleBean.class );
            // SampleBeanクラスのプロパティ全てを取得します。
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            // プロパティそれぞれの、getter/setterを出力します。
            for( int iF1 = 0; iF1 < propertyDescriptors.length; ++iF1 )
            {
                System.out.println( propertyDescriptors[iF1].getReadMethod() );
                System.out.println( propertyDescriptors[iF1].getWriteMethod() );
            }
            // public final native java.lang.Class java.lang.Object.getClass()
            // null
            // public int bean.SampleBean.getData()
            // public void bean.SampleBean.setData(int)
        }
        catch( IntrospectionException e )
        {
            // IntrospectorクラスのgetBeanInfo()メソッドで例外が発生した場合
            // (JavaBeansじゃない場合とか)にはIntrospectionException例外が
            // 投げられます。
            e.printStackTrace();
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

  • (参照している単語はありません)
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/12
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。