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

    开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。

    当然你也可以用反射来操作JavaBean的属性,但是,内省专门用来操作JavaBean属性。这样看来是不是内省更专业些?它的API位置:java.beans.Introspector。

    什么是JavaBean?

      就是一个用来封装用户提交过来的数据的类,说白了就是一个描述用户数据的类。再说白点,就是一个类……

    什么是属性?

      注意字段(成员变量)和属性所指不同。一般来说,如果你和我一样不是高手,我们可以这样简单的来识别:一个类中拥有get或者set方法,那么它的属性就是get或者set方法的方法名中,“get”或者“set”后边的部分。任何类都至少有一个属性,因为所有类都继承Object类,而Object类中有一个getClass()方法……

    代码示例:

    BeanInfo info = Introspector.getBeanInfo(Person.class); //我们也可以从配置文件中获取某个class,参看反射相关内容。

    这就是将Person这个类文件的所有信息封装成一个类放在info中便于操作。BeanInfo是javaAPI中一个接口,这里getBeanInfo:

    getBeanInfo

    public static BeanInfo getBeanInfo(Class<?> beanClass,
                                       int flags)
                                throws IntrospectionException
    在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件,并将结果用一些控制标记表示。

    如果 Java Bean 的 BeanInfo 类以前已经基于相同的参数被内省,则从 BeanInfo 缓存中检索 BeanInfo 类。

    PropertyDescriptor[] pds = info.getPropertyDescriptors();//属性描述器,得到类的所有属性

    for(PropertyDescriptor pd : pds){

      System.out.println(pd.getName());//可以打印其属性看看

      //如果不需要这个类从父类继承过来的属性可以用“BeanInfo info = Introspector.getBeanInfo(Person.class,父类);”来初始化。

    }

    如果只想操作一个类的某一个属性比如(Person类的age属性)可以这样写:

    PropertyDescriptor pd = new PropertyDescriptor("age",Person.class);

    Method method = pd.getWriteMethod(); //得到属性的写方法,这里就是拿到setAge方法

    method.invoke(指定Person对象,...method方法的参数);

    method = pd.getReadMethod();//获取读方法

    System.out.println(method.invoke(指定Person对象,...method方法的参数,没有就写null)); 

    获取属性的类型

    pd.getPropertyType();

    更多内容请参阅API

  • 相关阅读:
    Linux对文件的权限管理
    在Eclipse中安装TestNG
    JUnit 4 与 TestNG 对比
    postman之HTTP请求
    Fiddler抓包后保存为JMX(jmeter脚本,不限jmeter使用版本)
    JMeter使用之BlazeMeter的安装及初步使用
    Postman的第一个案例演示
    Postman的安装及注意事项
    SVN学习记录
    TestNG中如何执行测试
  • 原文地址:https://www.cnblogs.com/flying607/p/3444140.html
Copyright © 2011-2022 走看看