内省

 

 内省是sun公司开发的一套API,专门用于操作java对象的属性,行对于反射技术就简单的多了。
 
     内省访问JavaBean属性的两种方式:
 
       1、通过PropertyDescriptor类操作Bean的属性
 
       2、通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器,通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后通过反射几只来调用这些方法。
       java的属性:
 
              private String name 这是字段。
 
              private String job; 这是属性
 
              public String getJob(){
                     return job;
              }
 
       java属性的读写方法:
              public String getXxx(){   读的方法
                     return "xxx";
              }
              public void setXxx(){     写的方法
 
              }
例子:
       Student.java类
Code:
  1. public class Student {   
  2.   
  3.       private String name;   
  4.   
  5.       private int age;   
  6.   
  7.       public String getName() {   
  8.              return name;   
  9.       }   
  10.   
  11.       public void setName(String name) {   
  12.              this.name = name;   
  13.       }   
  14.   
  15.       public int getAge() {   
  16.              return age;   
  17.       }   
  18.   
  19.       public void setAge(int age) {   
  20.              this.age = age;   
  21.       }   
  22.   
 
 
       Introspector.java 处理类
 
Code:
  1. import java.beans.*;   
  2. import java.beans.PropertyDescriptor;   
  3. import java.lang.reflect.Method;   
  4.     
  5. import org.junit.Test;   
  6.     
  7. public class Intro {   
  8.     
  9.        @Test  
  10.        public void test() throws Exception {   
  11.     
  12.               Student stu = new Student();   
  13.     
  14.               // 1、通过Introspector类获得Bean对象的 BeanInfo,   
  15.     
  16.               BeanInfo entity = Introspector.getBeanInfo(Student.class);   
  17.     
  18.               // 2、然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor )   
  19.     
  20.               PropertyDescriptor pdrs[] = entity.getPropertyDescriptors();   
  21.     
  22.               // 3、通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,   
  23.     
  24.               for (PropertyDescriptor pd : pdrs) {   
  25.                      System.out.println(pd.getName());   获取此特性的编程名称   class(来自与java.lang.Object) name age   
  26.                      System.out.println(pd.getPropertyType()); 获取其类型      java.lang.String      java.lang.String int  
  27.                      if (pd.getName().equals("age")) {    
  28.                             Method md = pd.getWriteMethod();   
  29.                             md.invoke(st, 12);   
  30.     
  31.                      }   
  32.               }   
  33.               System.out.println(stu.getAge());// 12   
  34.        }   
  35.        @Test  
  36.        public void test1()throws Exception{   
  37.                  
  38.               Student stu = new Student();   
  39.                         
  40.               //通过构造器 创建 PropertyDescriptor对象   
  41.                         
  42.               PropertyDescriptor pd = new PropertyDescriptor("age", Student.class);   
  43.                                
  44.               Method md = pd.getWriteMethod(); //写操作   
  45.                         
  46.               md.invoke(st, 120);   
  47.                                
  48.               System.out.println(stu.getAge());//120   
  49.                         
  50.               md = pd.getReadMethod();   
  51.     
  52.               int value = (Integer)md.invoke(stu, null); //读操作   
  53.     
  54.               System.out.println(value);//120   
  55.        }   
  56. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值