论坛首页 入门技术论坛

反射工具类 (利用反射 get set 属性值 bean <--> map)

浏览 2511 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-16  
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
 * 反射工具类 
 * 利用反射 get set 属性值
 * bean <--> map
 *
 */
public class BeanReflectUtil {
    
    /**
     * get属性的值到Map
     * @param bean
     * @param valMap
     */
    public static Map<Object, Object> getFieldValueMap(Object bean) {
        Map<Object, Object> valueMap = new HashMap<Object, Object>();
        PropertyDescriptor[] props = getPropertyDescriptors(bean);
        for(PropertyDescriptor p:props){
            Method getter = p.getReadMethod();
            if(!"class".equals(p.getName())){
                try {
                    valueMap.put(p.getName(), getter.invoke(bean));
                } catch (Exception e) {
                    continue;
                }
            }
        }
        return valueMap;
    }

    /**
     * set属性的值到Bean
     * @param bean
     * @param valMap
     */
    public static void setFieldValue(Object bean, Map<Object, Object> valMap) {
        PropertyDescriptor[] props = getPropertyDescriptors(bean);
        for(PropertyDescriptor p:props){
            Method setter = p.getWriteMethod();
            if(setter!=null){
                try {
                    setter.invoke(bean,valMap.get(p.getName()));
                } catch (Exception e) {
                    continue;
                }
            }
        }
    }
    
    private static PropertyDescriptor[] getPropertyDescriptors(Object bean){
        Class<?> cls = bean.getClass();
        BeanInfo beanInfo = null;
        try {
            beanInfo = Introspector.getBeanInfo(cls);
        } catch (IntrospectionException e) {
            e.printStackTrace();
        }
        return beanInfo.getPropertyDescriptors();
    }
    
    public static void main(String[] args) {
        Test test = new Test();
            Test sunTest = new Test();
            sunTest.setId(2);
        
        Map<Object,Object> valMap =new HashMap<Object, Object>();
        valMap.put("id", 1);
        valMap.put("nameTest", "nameTest1");
        valMap.put("test", sunTest);
        valMap.put("name", "name1");
        
        BeanReflectUtil.setFieldValue(test, valMap);

        valMap = BeanReflectUtil.getFieldValueMap(test);
        
        for(Object obj:valMap.keySet()){
            System.out.println(obj + " ------ "+ valMap.get(obj));
        }
        
    }
     
}
/**
 * 测试类
 * @author user
 */
class Test{
    private int id;            //常规测试
    private String namemethod; //测试用get方法后的名称
    private String nameTest;   //测试名称规范
    private Test test;         //测试对象
    
    public String getName() {
        return namemethod;
    }
    public void setName(String name) {
        System.out.println("method: setName(String name)");
        this.namemethod = name;
    }
            
    /**
     * 测试set时候执行那个方法、是否同时执行
     */
    public void setName(int name) {
        System.out.println("method: setName(int name)");
    }
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNameTest() {
        return nameTest;
    }
    public void setNameTest(String nameTest) {
        this.nameTest = nameTest;
    }

    public Test getTest() {
        return test;
    }
    public void setTest(Test test) {
        this.test = test;
    }
    
    public String toString() {
        return "id:"+id+" name:"+namemethod;
    }
}


不对之处,恳请指出。

--------------------------------------------------------------------------
交流群:81552084
--------------------------------------------------------------------------
   发表时间:2012-08-16  
https://code.google.com/p/joor/
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics