java内省(Introspector)简介及实例

    技术2022-05-20  45

     java内省(Introspector)简介及实例

          java内省简介

             内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。例如类 

    中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。

    通过 getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一

    套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要

    了解这个规则(但你最好还是要搞清楚),这些 API 存放于包 java.beans 中。

          java内省实例演示

          一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然

    后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性

    描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射

    机制来调用这些方法。下面我们来看一个例子,这个例子把某个对象的所有属性名称

    和值都打印出来,可以分为以下几个步骤:

               1,通过Introspector类获得Bean对象的 BeanInfo, 然后通过 

    BeanInfo 来获取属性的描述器( PropertyDescriptor )                     

               2,通过这个属性描述器就可以获取某个属性对应的 

    getter/setter 方法   

               3,然后通过反射机制来调用这些方法。                           

                                                                           

                                                                           

                                                                   

       实例

    /*

     * 通过Introspector类获得Bean对象的 BeanInfo, 然后通过 BeanInfo 

    来获取属性的描述器(

     * PropertyDescriptor ) 通过这个属性描述器就可以获取某个属性对

    应的 getter/setter 方法,

     * 然后通过反射机制来调用这些方法。

     */

    @Test

    public void test() throws IntrospectionException, 

    IllegalArgumentException,

    IllegalAccessException, 

    InvocationTargetException {

    Student st = new Student();

    // 1、通过Introspector类获得Bean对象的 BeanInfo

    BeanInfo entity = Introspector.getBeanInfo

    (Student.class);

    // 2、然后通过 BeanInfo 来获取属性的描述器( 

    PropertyDescriptor 

    PropertyDescriptor pdrs[] = 

    entity.getPropertyDescriptors();

    // 3、通过这个属性描述器就可以获取某个属性对应的 

    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")) {  

    Method md = pd.getWriteMethod();

    md.invoke(st, 12);

    }

    }

    // System.out.println(st.getAge());

    }

    s


    最新回复(0)