您好,登錄后才能下訂單哦!
這篇文章主要介紹Java內省的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
下面我們就對內省做一下簡單介紹:
1.內省是java語言對bean類屬性、事件的一種處理方法
2.為什么要學內省?開發框架時,經常需要使用java對象的屬性來封裝程序的數據,每次都使用反射技術完成此類操作過于麻煩,所以sun公司開發了一套API,專門用于操作java對象的屬性。
3.內省訪問JavaBean屬性的兩種方式:
通過PropertyDescriptor類操作Bean的屬性
通過Introspector類獲得Bean對象的 BeanInfo,然后通過 BeanInfo 來獲取屬性的描述器( PropertyDescriptor ),通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法,然后通過反射機制來調用這些方法。
下面寫一下測試代碼
Java代碼
/* * 通過Introspector類獲得Bean對象的 BeanInfo, 然后通過 BeanInfo 來獲取屬性的描述器( * PropertyDescriptor ) 通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法, * 然后通過反射機制來調用這些方法。 */ @Test public void test() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { Student st = new Student(); // 1、通過Introspector類獲得Bean對象的 BeanInfo, BeanInfo entity = Introspector.getBeanInfo(Student.class); // 2、然后通過 BeanInfo 來獲取屬性的描述器( PropertyDescriptor ) PropertyDescriptor pdrs[] = entity.getPropertyDescriptors(); // 3、通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法, for (PropertyDescriptor pd : pdrs) { // System.out.println(pd.getName()); /* * System.out.println(pd.getShortDescription()); * System.out.println(pd.getDisplayName()); */ if (pd.getName().equals("age")) { //age是什么類型? Method md = pd.getWriteMethod(); md.invoke(st, 12); } } // System.out.println(st.getAge()); }
bean類
Java代碼
package cn.csdn.Introspector; public class Student { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } private String email; public String getXxx(){ return "Longmanfei"; } }
以上是“Java內省的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。