类Introspector- -

来源:互联网 发布:淘宝直通车展示位置 编辑:程序博客网 时间:2024/05/31 19:37
/** 系统定义的工具** 类Introspector* 用于分析一个Bean** Introspector.getBeanInfo()* 用于开始分析Bean,返回一个相关的BeanInfo对象* 第一个参数 待分析Bean的类* 第二个参数 可选 决定分析到该Bean的哪一层基类上去。* 如果不带第二个参数的话,分析所有的属性** 对于任何一个Java的类,都是从Object类继承过来的* Object.getClass() * 用于获得该对象所依照的类* Object.getSuperclass()* 用于获得该对象所依照的类的父类**/import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*;import java.lang.reflect.Method;public class myBeanIntrospector{ public myBeanIntrospector() {  try  {   //实例化一个Bean   Test2 beanObj = new Test2();
   //依据Bean产生一个相关的BeanInfo类   BeanInfo bInfoObject =    Introspector.getBeanInfo(beanObj.getClass(),beanObj.getClass().getSuperclass());
   //定义一个用于显示的字符串   String output = "";
   //开始自省
 
   /*   * BeanInfo.getMethodDescriptors()   * 用于获取该Bean中的所有允许公开的成员方法,以MethodDescriptor数组的形式返回   *   * MethodDescriptor类   * 用于记载一个成员方法的所有信息   * MethodDescriptor.getName()   * 获得该方法的方法名字
   * MethodDescriptor.getMethod()   * 获得该方法的方法对象(Method类)   *   * Method类   * 记载一个具体的的方法的所有信息   * Method.getParameterTypes()   * 获得该方法所用到的所有参数,以Class数组的形式返回   *   * Class..getName()   * 获得该类型的名字   */   output = "内省成员方法:/n";   MethodDescriptor[] mDescArray = bInfoObject.getMethodDescriptors();   for (int i=0;i<mDescArray.length ;i++ )   {    //获得一个成员方法描述器所代表的方法的名字    String methodName = mDescArray[i].getName();        String methodParams = new String();    //获得该方法对象    Method methodObj = mDescArray[i].getMethod();    //通过方法对象获得该方法的所有参数,以Class数组的形式返回    Class[] parameters = methodObj.getParameterTypes();    if (parameters.length>0)    {     //获得参数的类型的名字     methodParams = parameters[0].getName();     for (int j=1;j<parameters.length ;j++ )     {      methodParams = methodParams + "," + parameters[j].getName();     }    }    output += methodName + "(" + methodParams + ")/n";   }   System.out.println(output);
 
   /*   * BeanInfo.getPropertyDescriptors()   * 用于获取该Bean中的所有允许公开的成员属性,以PropertyDescriptor数组的形式返回   *   * PropertyDescriptor类   * 用于描述一个成员属性   *   * PropertyDescriptor.getName()   * 获得该属性的名字   *   * PropertyDescriptor.getPropertyType()   * 获得该属性的数据类型,以Class的形式给出   *   */   output = "内省成员属性:/n";   PropertyDescriptor[] mPropertyArray = bInfoObject.getPropertyDescriptors();   for (int i=0;i<mPropertyArray.length ;i++ )   {    String propertyName = mPropertyArray[i].getName();
    Class propertyType = mPropertyArray[i].getPropertyType();
    output += propertyName + " ( " + propertyType.getName() + " )/n";   }   System.out.println(output);
 
   /*   * BeanInfo.getEventSetDescriptors()   * 用于获取该Bean中的所有允许公开的成员事件,以EventSetDescriptor数组的形式返回   *   * EventSetDescriptor类   * 用于描述一个成员事件   *   * EventSetDescriptor.getName()   * 获得该事件的名字   *   * EventSetDescriptor.getListenerType()   * 获得该事件所依赖的事件监听器,以Class的形式给出   *   */   output = "内省绑定事件:/n";   EventSetDescriptor[] mEventArray = bInfoObject.getEventSetDescriptors();   for (int i=0;i<mEventArray.length ;i++ )   {    String EventName = mEventArray[i].getName();
    Class listenerType = mEventArray[i].getListenerType();
    output += EventName + "(" + listenerType.getName() + ")/n";   }   System.out.println(output);
   System.out.println("write by esonghui :)");
 
  }  catch (Exception e)  {   System.out.println("异常:" + e);  } }
 public static void main(String[] args)  {  new myBeanIntrospector(); }}
from:http://fanglulu.51.net/java/javacode/myBeanIntrospector.java
原创粉丝点击