JavaBeanと対応する内省API


JavaBeanは少し仕様のあるjavaクラスです.
正規性:クラスのアクセス権限publicの場合、パラメトリックコンストラクタの有無、属性アクセス権限がprivateの場合、アクセス属性はset、getメソッド、およびいくつかの名前付き仕様などを使用します.
利益性:javabeanはプログラムの中で便利に再利用され、開発効率を高めることができます.他のクラスは、これらのJavaBeanプロパティを独自のメカニズムで発見し、操作します.
------------------------------------------------------------------------------------------------------------------------------------
JDKにはJavaBeanを操作するAPIがいくつか用意されており、このAPIは内省と呼ばれています.次に例を示します.
JavaBeanクラス(ReflectPoint):
package com.www.Reflect;
public class ReflectPoint {
 private int x;
 private int y;
 
 public ReflectPoint(int x,int y){   //        !              
  super();
  this.x = x;
  this.y = y;
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
 
}

これはテストクラス(IntroSpectorTest)で、このクラスでは内省APIが使用されます.
package com.www.Reflect;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
/*
 *   JavaBean          
 */
public class IntroSpectorTest {
 public static void main(String[] args) throws Exception {
  ReflectPoint pt1 = new ReflectPoint(4, 6);
  String propertyName = "x";
  
  //    PropertyDescriptor         JavaBean  set、get  
  
  PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
  //  PropertyDescriptor     ,    
  
        //  get()  x  
      
        Method methodGetX = pd.getReadMethod();//      
       
        Object retVal = methodGetX.invoke(pt1);//     
        
        System.out.println(retVal);
        
        //  Set()   x  
       
        Method methodSetX = pd.getWriteMethod();//      
       
        methodSetX.invoke(pt1,8);//     
        
        System.out.println(pt1.getX());
   
 }
}

 
もちろん,開発ではBeanUtilパッケージを用いて属性の取得や設定を容易にすることが多い.(commons-beanutils.jarとcommons-logging-1.1.1.jarの2つのパッケージをインポートするには)
 
 
  BeanUtils.setProperty(pt1, propertyName, "9");   //pt1 JavaBean  ,propertyName    
 
  System.out.println(BeanUtils.getProperty(pt1,propertyName));

 
パッケージをインポートするとJavaBeanの操作が簡単になることがわかります.