BeanDebugger.java 方便的列出 bean 对象的所有属性和值

package beansoft;





import java.beans.PropertyDescriptor;

import java.util.Vector;



/**

 * Debugger at runtime, internal used by BeanSoft.

 */

public class BeanDebugger {

    /**

     * 调试, 打印出给定 Bean 的所有属性的取值.

     * @date 2005-07-31

     * @author BeanSoft

     * @param bean 需要调试的对象

     */

    public static void dump(Object bean) {

        java.beans.PropertyDescriptor[] descriptors =

            getAvailablePropertyDescriptors(bean);



        for(int i = 0; descriptors != null && i < descriptors.length; i++) {

            java.lang.reflect.Method readMethod = descriptors[i].getReadMethod();



            try {

                Object value = readMethod.invoke(bean, null);

                System.out.println("[" + bean.getClass().getName() + "]." +

                        descriptors[i].getName() + "(" + 

                        descriptors[i].getPropertyType().getName() + ") = "

                        + value);

            } catch (Exception e) {

                // TODO auto generated try-catch

                e.printStackTrace();

            }

        }

    }



 /**

  * 从 bean 中读取有效的属性描述符.

  *

  * NOTE: 名称为 class 的 PropertyDescriptor 被排除在外.

  *

  * @param bean

  *            Object - 需要读取的 Bean

  * @return PropertyDescriptor[] - 属性列表

  */

 public static java.beans.PropertyDescriptor[] getAvailablePropertyDescriptors(

   Object bean) {

  try {

   // 从 Bean 中解析属性信息并查找相关的 write 方法

   java.beans.BeanInfo info = java.beans.Introspector.getBeanInfo(bean

     .getClass());

   if (info != null) {

    java.beans.PropertyDescriptor pd[] = info

      .getPropertyDescriptors();

    Vector columns = new Vector();



    for (int i = 0; i < pd.length; i++) {

     String fieldName = pd[i].getName();



     if (fieldName != null && !fieldName.equals("class")) {

      columns.add(pd[i]);

     }

    }



    java.beans.PropertyDescriptor[] arrays = new java.beans.PropertyDescriptor[columns

      .size()];



    for (int j = 0; j < columns.size(); j++) {

     arrays[j] = (PropertyDescriptor) columns.get(j);

    }



    return arrays;

   }

  } catch (Exception ex) {

   System.out.println(ex);

   return null;

  }

  return null;

 }



}



 

因为开发过程中总是要调用一些 JavaBean 对象, 然后通过数据库操作来给这些对象赋值, 原来调试的时候是通过实现 toString() 方法, 后来发现过于麻烦, 干脆用反射机制直接写了一个工具类来自动打印出来 bean 的所有属性的名称, 类型以及当前的值, 比较方便一些.

 

用法: BeanDebugger.dump(myBean);

 

一个输出示例:

[technote.query.bean.Category].cat_desc(java.lang.String) = Cables
[technote.query.bean.Category].cat_id(int) = 19
[technote.query.bean.Category].family_desc(java.lang.String) = Accessories and Cables
[technote.query.bean.Category].family_id(int) = 1
[technote.query.bean.Category].group_id(int) = 100
[technote.query.bean.Category].subcat_desc(java.lang.String) = Accessory
[technote.query.bean.Category].subcat_id(int) = 147

147340.html

BeanSoft 2007-09-22 11:30 发表评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值