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

package beansoft;


import java.beans.PropertyDescriptor;
import java.util.Vector;

/**
 * Debugger at runtime, internal used by BeanSoft.
 */
public class BeanDebugger {
    /**
     * 调试, 打印出给定 Bean 的所有属性的取值.
     * @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

你可能感兴趣的:(Bean,Java,J#)