zoukankan      html  css  js  c++  java
  • javabean的内省(Introspector)

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

     

    中有属性 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,然后通过反射机制来调用这些方法。

     

    package com.ztc.introspector;

    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import org.junit.Test;


    public class Demo1 {

    @Test
    public void test1() throws Exception{
    BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class);
    PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors();
    for(PropertyDescriptor pd : propertyDescriptors){
    System.out.println(pd.getName());
    }

    }


    @Test
    public void test2()throws Exception{
    PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Person.class);

    Method method = propertyDescriptor.getWriteMethod();
    Person p = (Person) Class.forName("cn.com.introspector.Person").newInstance();
    method.invoke(p, 15);

    System.out.println(propertyDescriptor.getReadMethod().invoke(p, null));
    }

    @Test
    public void test3()throws Exception{
    Person p = (Person) Class.forName("cn.com.introspector.Person").newInstance();
    PropertyDescriptor propertyDescriptor =new PropertyDescriptor("age", Person.class);
    System.out.println(propertyDescriptor.getPropertyType());

    }

    }

  • 相关阅读:
    apache wicket 7.X让html回归webapp文件夹下
    HDU 4050 wolf5x (概率DP 求期望)
    struts2和数据库模糊查询
    codeforces 453A Little Pony and Expected Maximum 最大值期望
    挖坑
    BZOJ1430: 小猴打架
    BZOJ1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
    1645: [Usaco2007 Open]City Horizon 城市地平线
    POJ1741 Tree
    CH Round #53-数据备份
  • 原文地址:https://www.cnblogs.com/tc971121/p/10547022.html
Copyright © 2011-2022 走看看