首页 > 代码库 > java内省小记

java内省小记

//为了让程序员更好的操作javabean的属性,JDK提供了一套API用来访问某个属性的setter或getter方法。这就是内省
    //内省(Introspector)是java语言对javabean类属性,方法和事件的一种标准处理方式。
    //内省访问javabean有两种方法。
    
    //设置javaBean属性值。
    public static void main(String[] args) throws Exception {
        //1.方式一
        /*//实例化一个person对象
        Person beanObj = new Person();
        //通过Introspector对象获取Person对象的BeanInfo对象
        BeanInfo beanInfoObject = Introspector.getBeanInfo(beanObj.getClass(),beanObj.getClass().getSuperclass());
        //通过BeanInfoObject的getPropertyDescriptors方法,的到Bean中的所有属性信息。
        propertyDescriptors = beanInfoObject.getPropertyDescriptors();
        //便利属性信息,通过getName的到属性名,通过getPropertyType得到属性类型对象。
        for (int i = 0; i <propertyDescriptors.length; i++) {
            
            String name = propertyDescriptors[i].getName();
            Class<?> propertyType =  propertyDescriptors[i].getPropertyType();
            System.out.println(name+"("+propertyType.getName()+")");
        }*/
        
        //方式二  直接通过PropertyDescriptor对象,获取属性信息。
        
        //创建person类的对象
        Person p = new Person();
        //通过属性描述器,获得那么属性描述信息。
        PropertyDescriptor pd = new PropertyDescriptor("name",p.getClass());
        //获取name属性的setter方法。
        Method methodName = pd.getWriteMethod();
        //调用setter方法。设置name值
        methodName.invoke(p,"小米");
        
        System.out.println(p);

//相应的person类

private String name;
    private int age;
    public Person(){}
    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;
    }
    public String toString(){
        return this.name+":"+this.age;
    }

 

java内省小记