Java內(nèi)省

內(nèi)省(Introspector) 是Java 語言對 JavaBean 類屬性、事件的一種缺省處理方法。說簡單一點就是操作JavaBean的一套API。
什么是JavaBean?
javaBean只是一種規(guī)范,大家都按照約定好的一套規(guī)則寫java類,既然是規(guī)范就有一定的要求:

  • 類是public的,然后有個無參的構(gòu)造函數(shù)
  • 屬性是private的,通過設(shè)置setXXX()和getXXX()來訪問
  • 能支持事件,例如 addXXXXListener(XXXEvent e), 事件可以是 Click 事件,Keyboard 事件等等
  • 提供應(yīng)該 反射機制,這樣可以查看java bean的各種信息
  • 可以序列化,可以保存在硬盤上
    例如:
public class User {
    private String name;

    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

JDK內(nèi)省類庫

PropertyDescriptor類:

PropertyDescriptor可以獲取某一個具體的屬性。主要的方法有:

  • getPropertyType(),獲得屬性的Class對象;
  • getReadMethod(),獲得用于讀取屬性值的方法,例如getXXX()方法;
  • getWriteMethod(),獲得用于寫入屬性值的方法,例如setXXX()方法;
  • hashCode(),獲取對象的哈希值;
  • setReadMethod(Method readMethod),設(shè)置用于讀取屬性值的方法;
  • setWriteMethod(Method writeMethod),設(shè)置用于寫入屬性值的方法。
    示例代碼:
public class JavaBeanUtils {
    public static void main(String[] args) throws IntrospectionException {
        User user = new User();

        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("name",user.getClass());
        System.out.println(propertyDescriptor.getPropertyType());
        Method  method = propertyDescriptor.getReadMethod();
        System.out.println(method.getName());
        method = propertyDescriptor.getWriteMethod();
        System.out.println(method.getName());

    }
}

輸入結(jié)果:

class java.lang.String
getName
setName

Introspector類:

Introspector可以按照JavaBean的規(guī)范將一個類封裝成BeanInfo對象。通過調(diào)用getPropertyDescriptors()方法會返回一個包含所有屬性的PropertyDescriptor對象數(shù)組,通過PropertyDescriptor可以操作類的屬性。
具體代碼如下:

public class JavaBeanUtils {
  public static void main(String[] args) throws IntrospectionException {
      BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
      PropertyDescriptor[] pd = beanInfo.getPropertyDescriptors();

      //迭代每一個描述器
      for (PropertyDescriptor propertyDescriptor : pd) {

          System.out.println("屬性名 :"+propertyDescriptor.getName());
          System.out.println("setter :"+propertyDescriptor.getWriteMethod());
          System.out.println("getter :"+propertyDescriptor.getReadMethod());
      }
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容