Javaのイントロスペクションイントロスペクター

概要:

  1. JavaBeanの仕様
  2. 内観

、JavaBeanの仕様

JavaBeanの - 以下の仕様に従うように。

  1. java.io.Serializableを実装します。
  2.  javaBeanの宿泊施設には、プライベートメンバ変数はgetter / setterメソッドを持っています。また、このような属性と呼ばれる読み取り専用の属性としてのみgetterメソッドを提供することができる。また、唯一のセッターメソッドは、書き込み専用のプロパティと呼ばれるような性質を提供することができます。
  3. JavaBeanは、空のコンストラクタを持っている必要があります
  4. JavaBeanは、publicコンストラクタを持っている必要があります

第二に、イントロスペクション

  • まず、内省的な性質は、反射を使用することです
  • あなたはすぐにすぐにBeanオブジェクトを操作するために、イントロスペクションによってゲッターとセッターのJavaBean変数を取得することができます。

テストされたjavaBean

パブリック クラス人{
     プライベート文字列名;
    プライベート int型の年齢;
    公共 ボイド(){言う
    } 

    パブリック文字列のgetName(){
         戻り値の名前。
    } 

    公共 ボイドのsetName(文字列名){
         この .nameの= 名前。
    } 

    公共 INT getAge(){
         戻り年齢; 
    } 

    公共 ボイド setAge(int型の年齢){
         この .age = 年齢。
    } 
}

 

1. JavaBeanクラス記述子は、BeanInfoをして、オブジェクトのすべてのプロパティとメソッドを取得することができます

    パブリック 静的 ボイドメイン(文字列[]引数)がスロー例外{
         // 属性記述たjavaBean取得するために使用されるのBeanInfoオブジェクト取得 
        のBeanInfoのBeanInfo = Introspector.getBeanInfo(人。クラス);
         // 記載された方法である 
        MethodDescriptorを[] methodDescriptors = beanInfo.getMethodDescriptors();
         //は、記述子属性 
        のPropertyDescriptor [] =のpropertyDescriptorsの; beanInfo.getPropertyDescriptors()
         // テスト対象 
        人物人= 新しい新規人物(); 

        のため(のPropertyDescriptorのPropertyDescriptor:propertyDescriptorsを){
             //属性名 
            のSystem.out.println( "個人的属性:" + propertyDescriptor.getName());
            もし( "名前" .equals(propertyDescriptor.getName())){
                 // 属性读方法 
                方法readMethod = propertyDescriptor.getReadMethod()。
                // 属性的写方法 
                方法writeMethod = propertyDescriptor.getWriteMethod()。
                writeMethod.invoke(人、 "暁明" ); 
                System.out.println( "人的名:" + readMethod.invoke(人)); 
                クラス <?>のプロパティタイプ=  propertyDescriptor.getPropertyType();
                のSystem.out.println( "Typeプロパティ:" + propertyType.getName()); 
            } 
        } 
    }

 

プロパティ記述子へ2.直接アクセス

    公共の 静的な 無効メイン(文字列[] args)をスロー例外{ 
        人物P = 新しい新しい人を();
         // 名前記述子属性によって直接アクセス
         // name属性記述子は、オブジェクトのnameプロパティpの当社の直接操作を容易に取得します。
        記述子=のPropertyDescriptor 新しい新しい PropertyDescriptorを(。 "名前"、人のクラス); 
        メソッド、writeMethod = descriptor.getWriteMethod(); 
        writeMethod.invoke(P、 "nananan" ); 
        System.out.printlnは( "人物オブジェクト名:" + 記述子。 。getReadMethod()を呼び出す(P)); 
    }

 

おすすめ

転載: www.cnblogs.com/liuboyuan/p/11120481.html