日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 中的内省 introspector

發布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 中的内省 introspector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

經常需要使用java對象的屬性來封裝程序的數據,每次都使用反射技術完成此類操作過于麻煩,所以sun公司開發了一套API,專門用于操作java對象的屬性。

內省(IntroSpector)是Java語言對JavaBean 類屬性、事件的一種處理方法。 例如類A中有屬性name,那我們可以通過getName,setName 來得到其值或者設置新的值。 通過getName/setName 來訪問name屬性,這就是默認的規則。

Java中提供了一套API 用來訪問某個屬性的getter/setter方法,通過這些API可以使你不需要了解這個規則,這些API存放于包java.beans 中。

一般的做法是通過類Introspector的getBeanInfo方法獲取某個對象的BeanInfo信息,然后通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然后我們就可以通過反射機制來調用這些方法。

我們又通常把javabean的實例對象稱之為值對象,因為這些bean中通常只有一些信息字段和存儲方法,沒有功能性方法。

一個JavaBean類可以不當JavaBean用,而當成普通類用。JavaBean實際就是一種規范,當一個類滿足這個規范,這個類就能被其它特定的類調用。一個類被當作javaBean使用時,JavaBean的屬性是根據方法名推斷出來的,它根本看不到java類內部的成員變量。去掉set前綴,然后取剩余部分,如果剩余部分的第二個字母是小寫的,則把剩余部分的首字母改成小的。

內省訪問JavaBean有兩種方法:

  • 通過PropertyDescriptor來操作Bean對象
  • public static void demo1() throws Exception {User user = new User("zhangsan", 21);String propertyName = "name";// 直接指定要訪問的屬性PropertyDescriptor pd = new PropertyDescriptor(propertyName, user.getClass());// 獲取到讀方法Method readMethod = pd.getReadMethod();// 反射機制調用Object invoke = readMethod.invoke(user, null);System.out.println("名字:" + invoke);pd.getWriteMethod().invoke(user, "lisi");invoke = readMethod.invoke(user, null);System.out.println("名字:" + invoke);} }
  • 通過Introspector類獲得Bean對象的 BeanInfo,然后通過 BeanInfo 來獲取屬性的描述器( PropertyDescriptor ),通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法,然后通過反射機制來調用這些方法。
  • public static void demo2() throws Exception {// 獲取整個Bean的信息// BeanInfo beanInfo= Introspector.getBeanInfo(user.getClass());// 在Object類時候停止檢索,可以選擇在任意一個父類停止BeanInfo beanInfo = Introspector.getBeanInfo(user.getClass(), Object.class);System.out.println("所有屬性描述:");// 獲取所有的屬性描述PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();for (PropertyDescriptor propertyDescriptor : pds) {System.out.println(propertyDescriptor.getName());}System.out.println("所有方法描述:");for (MethodDescriptor methodDescriptor : beanInfo.getMethodDescriptors()) {System.out.println(methodDescriptor.getName());// Method method = methodDescriptor.getMethod();} }

    User.java

    public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;} }

    想了解更多精彩內容請關注我的公眾號

    本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
    點擊這里快速進入簡書

    GIT地址:http://git.oschina.net/brucekankan/
    點擊這里快速進入GIT

    總結

    以上是生活随笔為你收集整理的java 中的内省 introspector的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。