這篇文章主要介紹Java內(nèi)省的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的磐安網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
下面我們就對(duì)內(nèi)省做一下簡(jiǎn)單介紹:
1.內(nèi)省是java語(yǔ)言對(duì)bean類屬性、事件的一種處理方法
2.為什么要學(xué)內(nèi)省?開(kāi)發(fā)框架時(shí),經(jīng)常需要使用java對(duì)象的屬性來(lái)封裝程序的數(shù)據(jù),每次都使用反射技術(shù)完成此類操作過(guò)于麻煩,所以sun公司開(kāi)發(fā)了一套API,專門(mén)用于操作java對(duì)象的屬性。
3.內(nèi)省訪問(wèn)JavaBean屬性的兩種方式:
通過(guò)PropertyDescriptor類操作Bean的屬性
通過(guò)Introspector類獲得Bean對(duì)象的 BeanInfo,然后通過(guò) BeanInfo 來(lái)獲取屬性的描述器( PropertyDescriptor ),通過(guò)這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的 getter/setter 方法,然后通過(guò)反射機(jī)制來(lái)調(diào)用這些方法。
下面寫(xiě)一下測(cè)試代碼
Java代碼
/* * 通過(guò)Introspector類獲得Bean對(duì)象的 BeanInfo, 然后通過(guò) BeanInfo 來(lái)獲取屬性的描述器( * PropertyDescriptor ) 通過(guò)這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的 getter/setter 方法, * 然后通過(guò)反射機(jī)制來(lái)調(diào)用這些方法。 */ @Test public void test() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { Student st = new Student(); // 1、通過(guò)Introspector類獲得Bean對(duì)象的 BeanInfo, BeanInfo entity = Introspector.getBeanInfo(Student.class); // 2、然后通過(guò) BeanInfo 來(lái)獲取屬性的描述器( PropertyDescriptor ) PropertyDescriptor pdrs[] = entity.getPropertyDescriptors(); // 3、通過(guò)這個(gè)屬性描述器就可以獲取某個(gè)屬性對(duì)應(yīng)的 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內(nèi)省的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!