梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
package org.vanpull.frame.commons.page.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.vanpull.demo.pojo.User;

/**
 * 
 * <p>
 * Title:[Bean反射加强]
 * </p>
 * <p>
 * Description: [利用反射机制,处理Bean]
 * </p>
 * <p>
 * Copyright 2009 Huyvanpull Co., Ltd.
 * </p>
 * <p>
 * All right reserved.
 * </p>
 * 
 * 
@version 1.0
 * 
 * <p>
 * Created by [Huyvanpull] [Jul 6, 2009]
 * </p>
 * <p>
 * Midified by [修改人] [修改时间]
 * </p>
 * 
 
*/

public class BeanRelectUtil
{
    
/**
     * 
     * <p>
     * Description:[把Bean对象的属性和值映射成一个MAP]
     * </p>
     * <p>
     * Created by [Huyvanpull] [Jul 6, 2009]
     * </p>
     * <p>
     * Midified by [修改人] [修改时间]
     * </p>
     * 
     * 
@return
     
*/

    
public Map<String, Object> bean2Map(Object bean)
    
{
        Map
<String, Object> fieldNVMap = new HashMap<String, Object>();
        
/** 如果bean参数的值为null,直接返回 */
        
if (bean == null)
        
{
            
return fieldNVMap;
        }

        Class
<?> claz = bean.getClass();
        
/** 得到bean的所有成员变量 */
        Field[] fileds 
= claz.getDeclaredFields();
        
for (Field field : fileds)
        
{
            String fieldName 
= field.getName();
            String getterMethodName 
= getGetterOrSetterName(fieldName, "get");
            Object filedValue 
= null;
            
try
            
{
                
/** 根据成员变量得到该变量的Getter方法 */
                Method method 
= claz.getMethod(getterMethodName);
                
if (method != null)
                
{
                    
/** 根据该成员变量的Getter方法得到该方法的值 */
                    filedValue 
= method.invoke(bean, new Object[0]);
                }

                fieldNVMap.put(fieldName, filedValue);
            }

            
catch (Exception ex)
            
{}
        }

        
return fieldNVMap;
    }

    
    
/**
     * 
     * <p>
     * Description:[把Map中的键值对映射成对象的属性和值]
     * </p>
     * <p>
     * Created by [Huyvanpull] [Jul 6, 2009]
     * </p>
     * <p>
     * Midified by [修改人] [修改时间]
     * </p>
     * 
     * 
@param claz
     * 
@param fieldNVMap
     * 
@return
     
*/

    
public Object map2Bean(Class<?> beanClaz, Map<String, Object> fieldNVMap)
    
{
        Object object 
= null;
        
/** 防止claz不存不带参数的构造方法开始 ************ */
        
try
        
{
            object 
= beanClaz.newInstance();
        }

        
catch (Exception ex)
        
{
            
return object;
        }

        
/** 防止claz不存不带参数的构造方法结束 ************ */
        
        Field[] fields 
= beanClaz.getDeclaredFields();
        
for (Field field : fields)
        
{
            String fieldName 
= field.getName();
            Object fieldValue 
= fieldNVMap.get(fieldName);
            
/** 参数类型是否相同,不同则进行下一轮循环 */
            
if (fieldValue != null && fieldValue.getClass() != field.getType())
            
{
                
continue;
            }

            
/** 得到Setter方法 */
            String setterName 
= getGetterOrSetterName(fieldName, "set");
            
try
            
{
                Method method 
= beanClaz.getMethod(setterName, field.getType());
                
if (method != null)
                
{
                    Object[] params 
= new Object[1];
                    params[
0= fieldValue;
                    
/** 调用Setter方法,设置该对象的值 */
                    method.invoke(object, params);
                }

            }

            
catch (Exception ex)
            
{
                ex.printStackTrace();
            }

        }

        
return object;
    }

    
    
/**
     * 
     * <p>
     * Description:[根据成员变量名,得到成员变量的Getter或Setter方法名]
     * </p>
     * <p>
     * Created by [Huyvanpull] [Jul 6, 2009]
     * </p>
     * <p>
     * Midified by [修改人] [修改时间]
     * </p>
     * 
     * 
@param fieldName
     * 
@return
     
*/

    
private String getGetterOrSetterName(String fieldName, String prdfix)
    
{
        StringBuffer getterOrSetterName 
= new StringBuffer();
        getterOrSetterName.append(prdfix);
        getterOrSetterName.append(fieldName.substring(
01).toUpperCase());
        
if (getterOrSetterName.length() > 1)
        
{
            getterOrSetterName.append(fieldName.substring(
1));
        }

        
return getterOrSetterName.toString();
    }

    
    
public static void main(String[] args)
    
{
        User bean 
= new User();
        bean.setId(
123L);
        bean.setUserName(
"huyvanpull");
        bean.setPassword(
"123456");
        bean.setDeleteFlag((
byte1);
        bean.setLoginCount(
1L);
        bean.setRemark(
"测试");
        bean.setLastLoginTime(Calendar.getInstance().getTime());
        bean.setCreateTime(Calendar.getInstance().getTime());
        
        BeanRelectUtil util 
= new BeanRelectUtil();
        Map
<String, Object> fieldNVMap = util.bean2Map(bean);
        
        Object object 
= util.map2Bean(bean.getClass(), fieldNVMap);
        System.out.println(object);
        
        User userBean 
= null;
        System.out.println(userBean.getClass());
    }

}

posted on 2009-07-07 14:57 HUIKK 阅读(218) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: