分享

【イントロスペクションとは】

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

説明

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

使用例

// 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();
}
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约