Introspector

  1. import  javax.swing.*;  
  2. import  java.awt.*;  
  3. import  java.awt.event.*;  
  4. import  java.beans.*;  
  5. import  java.io.*;  
  6. import  java.lang.reflect.Method;  
  7. public   class  myBeanIntrospector   
  8. {  
  9.  public  myBeanIntrospector ()  
  10.  {  
  11.   try   
  12.   {  
  13.    //实例化一个Bean   
  14.    Student beanObj = new  Student();  
  15.    //依据Bean产生一个相关的BeanInfo类   
  16.    BeanInfo bInfoObject =   
  17.    Introspector .getBeanInfo(beanObj.getClass(),beanObj.getClass().getSuperclass());  
  18.    //定义一个用于显示的字符串   
  19.    String output = "" ;  
  20.   
  21.    //开始自省   
  22.    
  23.    /*  
  24.    * BeanInfo.getMethodDescriptors()  
  25.    * 用于获取该Bean中的所有允许公开的成员方法,以MethodDescriptor数组的形式返回  
  26.    *  
  27.    * MethodDescriptor类  
  28.    * 用于记载一个成员方法的所有信息  
  29.    * MethodDescriptor.getName()  
  30.    * 获得该方法的方法名字  
  31.    * MethodDescriptor.getMethod()  
  32.    * 获得该方法的方法对象(Method类)  
  33.    *  
  34.    * Method类  
  35.    * 记载一个具体的的方法的所有信息  
  36.    * Method.getParameterTypes()  
  37.    * 获得该方法所用到的所有参数,以Class数组的形式返回  
  38.    *  
  39.    * Class..getName()  
  40.    * 获得该类型的名字  
  41.    */   
  42.    output = "内省成员方法:\n" ;  
  43.    MethodDescriptor[] mDescArray = bInfoObject.getMethodDescriptors();  
  44.    for  ( int  i= 0 ;i<mDescArray.length ;i++ )  
  45.    {  
  46.     //获得一个成员方法描述器所代表的方法的名字   
  47.     String methodName = mDescArray[i].getName();  
  48.       
  49.     String methodParams = new  String();  
  50.     //获得该方法对象   
  51.     Method methodObj = mDescArray[i].getMethod();  
  52.     //通过方法对象获得该方法的所有参数,以Class数组的形式返回   
  53.     Class[] parameters = methodObj.getParameterTypes();  
  54.     if  (parameters.length> 0 )  
  55.     {  
  56.      //获得参数的类型的名字   
  57.      methodParams = parameters[0 ].getName();  
  58.      for  ( int  j= 1 ;j<parameters.length ;j++ )  
  59.      {  
  60.       methodParams = methodParams + ","  + parameters[j].getName();  
  61.      }  
  62.     }  
  63.     output += methodName + "("  + methodParams +  ")\n" ;  
  64.    }  
  65.    System.out.println(output);  
  66.    
  67.    /*  
  68.    * BeanInfo.getPropertyDescriptors()  
  69.    * 用于获取该Bean中的所有允许公开的成员属性,以PropertyDescriptor数组的形式返回  
  70.    *  
  71.    * PropertyDescriptor类  
  72.    * 用于描述一个成员属性  
  73.    *  
  74.    * PropertyDescriptor.getName()  
  75.    * 获得该属性的名字  
  76.    *  
  77.    * PropertyDescriptor.getPropertyType()  
  78.    * 获得该属性的数据类型,以Class的形式给出  
  79.    *  
  80.    */   
  81.    output = "内省成员属性:\n" ;  
  82.    PropertyDescriptor[] mPropertyArray = bInfoObject.getPropertyDescriptors();  
  83.    for  ( int  i= 0 ;i<mPropertyArray.length ;i++ )  
  84.    {  
  85.     String propertyName = mPropertyArray[i].getName();  
  86.     Class propertyType = mPropertyArray[i].getPropertyType();  
  87.     output += propertyName + " ( "  + propertyType.getName() +  " )\n" ;  
  88.    }  
  89.    System.out.println(output);  
  90.    
  91.   
  92.    /*  
  93.    * BeanInfo.getEventSetDescriptors()  
  94.    * 用于获取该Bean中的所有允许公开的成员事件,以EventSetDescriptor数组的形式返回  
  95.    *  
  96.    * EventSetDescriptor类  
  97.    * 用于描述一个成员事件  
  98.    *  
  99.    * EventSetDescriptor.getName()  
  100.    * 获得该事件的名字  
  101.    *  
  102.    * EventSetDescriptor.getListenerType()  
  103.    * 获得该事件所依赖的事件监听器,以Class的形式给出  
  104.    *  
  105.    */   
  106.    output = "内省绑定事件:\n" ;  
  107.    EventSetDescriptor[] mEventArray = bInfoObject.getEventSetDescriptors();  
  108.    for  ( int  i= 0 ;i<mEventArray.length ;i++ )  
  109.    {  
  110.     String EventName = mEventArray[i].getName();  
  111.     Class listenerType = mEventArray[i].getListenerType();  
  112.     output += EventName + "("  + listenerType.getName() +  ")\n" ;  
  113.    }  
  114.    System.out.println(output);  
  115.    System.out.println("write by esonghui :)" );  
  116.    
  117.   }  
  118.   catch  (Exception e)  
  119.   {  
  120.    System.out.println("异常:"  + e);  
  121.   }  
  122.  }  
  123.  public   static   void  main(String[] args)   
  124.  {  
  125.   new  myBeanIntrospector ();  
  126.  }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值