究竟是內(nèi)省還是內(nèi)省
中國(guó)文化之博大精深之內(nèi)省還是內(nèi)省,究竟他是讀(xing)還是(sheng)呢,通過(guò)百度引擎貌似曉得,他是讀(xing)。
下面我們就對(duì)內(nèi)省做一下簡(jiǎn)單介紹:
1.內(nèi)省是java語(yǔ)言對(duì)bean類(lèi)屬性、事件的一種處理方法
2.為什么要學(xué)內(nèi)省?開(kāi)發(fā)框架時(shí),經(jīng)常需要使用java對(duì)象的屬性來(lái)封裝程序的數(shù)據(jù),每次都使用反射技術(shù)完成此類(lèi)操作過(guò)于麻煩,所以sun公司開(kāi)發(fā)了一套API,專(zhuān)門(mén)用于操作java對(duì)象的屬性。
3.內(nèi)省訪問(wèn)JavaBean屬性的兩種方式:
通過(guò)PropertyDescriptor類(lèi)操作Bean的屬性
通過(guò)Introspector類(lèi)獲得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類(lèi)獲得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類(lèi)獲得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是什么類(lèi)型?
- Method md = pd.getWriteMethod();
- md.invoke(st, 12);
- }
- }
- // System.out.println(st.getAge());
- }
bean類(lèi)
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";
- }
- }
【編輯推薦】