javaBean與Map 互轉


背景:有時候想不通阿帕奇的BeanUtils是怎么進行map和Bean互相轉化的。

工作閑暇之余,自己寫個一小段代碼,一探究竟,試試才發現,原來一切並非我們想的那么什么和復雜。

注:這里只是簡單實例,不追求嚴密的代碼規范和異常處理。

首先,新建一個工具類BeanUtils.java.

輔助實體類Person.java,如下:

public class Person {
    private String name;
    private int age;
    private boolean adult;
    
    
    public Person(String name, int age, boolean isAdult) {
        this.name = name;
        this.age = age;
        this.adult = isAdult;
    }
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", adult=" + adult + "]";
    }
    public Person() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public boolean isAdult() {
        return adult;
    }

    public void setAdult(boolean adult) {
        this.adult = adult;
    }
    
}

 

1.JavaBean 轉換為Map<String,Object>;

//bean 轉化為map
    public static Map<String,Object> tranferBean2Map(Object obj) throws  Exception{
        //obj為空,結束方法
        if(obj==null)
            return null;
        Map<String, Object> map=new HashMap<String, Object>();
        /*Introspector 類為通過工具學習有關受目標 Java Bean 支持的屬性、事件和方法的知識提供了一個標准方法。
         * java的自省機制
         * */
        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
        PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : ps) {
            String key = propertyDescriptor.getName();
            
            if(!"class".equals(key)){
                Method getter = propertyDescriptor.getReadMethod();
                Object value = getter.invoke(obj);
                map.put(key, value);
            }
        }
        return map;
        
    }

2.Map<String,Object>轉換為JavaBean ,使用簡單的泛型;

 

//map轉換為javaBean
    public static <T extends Object>  T transferMap2Bean(Map<String,Object> map,Class<T> clazz) throws Exception{
        T instance = clazz.newInstance();
        BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
        PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor property : descriptors) {
            String key=property.getName();
            if(map.containsKey(key)){
                Object value = map.get(key);
                Method setter = property.getWriteMethod();
                setter.invoke(instance, value);
            }
            
        }
        
        return instance;
    }
    

經過測試,可以成功進行map和javabean的互轉。

 

Introspector 類為通過工具學習有關受目標 Java Bean 支持的屬性、事件和方法的知識提供了一個標准方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM