• java内省机制Introspector


    访问JavaBean属性的两种方式

    1)直接调用bean的setXXX或getXXX方法;

    2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:

      a)通过PropertyDescriptor类操作Bean的属性;

      b)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

    public class Person {
        private String name; // 字段
        private String password;// 字段
        private Integer age;// 字段
        // 对字段添加了get或者set方法了,才叫做属性
        public String getXxx() {
            return "aa";
        }
        setter/getter
    }

    以下通过内省机制来操作Person对象。

    获得类所有的属性

    @Test
        public void test1() throws Exception {
    
            BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); //得到属性描述符
    
            for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                System.out.println(propertyDescriptor.getName());
            }
        }

    执行结果:age  class  money  name  password  xxx

    包括了从父类中继承过来的属性class

    获得本类中的所有属性

    @Test
        public void test2() throws Exception {
            // 剔除Object继承过来的属性
            BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    
            for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
                System.out.println(propertyDescriptor.getName());
            }
        }

    操纵bean的指定属性

    @Test
        public void test3() throws Exception {
            Person person = new Person();
    
            PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Person.class);
    
            // 得到属性的写方法,为属性赋值
            Method setAgeMethod = propertyDescriptor.getWriteMethod(); // setAge
            setAgeMethod.invoke(person, 34);
    
            // 获取属性的值
            System.out.println(person.getAge());
            Method getAgeMethod = propertyDescriptor.getReadMethod();
            System.out.println(getAgeMethod.invoke(person, null));
        }

    获取当前操作的属性的类型

    @Test
        public void test4() throws Exception {
            PropertyDescriptor propertyDescriptor = new PropertyDescriptor("money",Person.class);
            
            Class<?> propertyType = propertyDescriptor.getPropertyType();
            System.out.println(propertyType);
        }
  • 相关阅读:
    如何知道电脑是几核?
    宝塔服务器管理助手Linux面版使用教程
    阿里云服务器怎么更换系统盘

    MoonScript
    webmin
    requests 0.7.6
    盘古搜索
    c练习总结
    Download a webpage using CURL in C
  • 原文地址:https://www.cnblogs.com/luogankun/p/3991451.html
Copyright © 2020-2023  润新知