java 使用BeanInfo实现bean实体与map之间的互相转换

java 使用BeanInfo实现bean实体与map之间的互相转换。 
public interface BeanInfo希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。

mport java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import com.bh.bean.User;

public class Test {

    /**
     * bean转map
     */
    public Test() {
        try {
            Map<String, Object> user=beanTransformToMap(new User(1, "zs"));
            Iterator<Entry<String, Object>> iterator = user.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String, Object> next = iterator.next();
                System.out.println(next.getKey()+" "+next.getValue());
            }

        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
                | IntrospectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**map转实体
     * @param map
     * @return
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     * @throws IntrospectionException
     */
    private User mapTransformToBean(Map<String, Object> map) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException{

        User user=new User();
        BeanInfo beanInfo = Introspector.getBeanInfo(user.getClass());  
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();  
        for (PropertyDescriptor property : propertyDescriptors) {  
            String key = property.getName();  
            if (map.containsKey(key)) {  
                Object value = map.get(key);  
                //得到property对应的setter方法  
                Method setter = property.getWriteMethod();  
                setter.invoke(user, value);  
            }  
        }
        return user;  
    }
    /**实体转map
     * @param user
     * @return
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     * @throws IntrospectionException
     */
    private Map<String, Object> beanTransformToMap(User user) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException{

        Map<String, Object> map = new HashMap<String, Object>();
        BeanInfo beanInfo = Introspector.getBeanInfo(user.getClass());  
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();  
        for (PropertyDescriptor property : propertyDescriptors) { 
            String key = property.getName();  
            // 过滤class属性  
            if (!key.equals("class")) {  
                // 得到property对应的getter方法  
                Method getter = property.getReadMethod();  
                Object value = getter.invoke(user);  
                map.put(key, value);  
            }  
        }
        return map;  
    }
    public static void main(String[] args) {

        new Test();
    }
}

 

posted @ 2018-01-10 23:26  猪脚踏浪  阅读(691)  评论(0编辑  收藏  举报