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