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

原创 2016年12月12日 14:30:55

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

import 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();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

java反射 beaninfo的应用

package com.zwy; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java....
  • w329636271
  • w329636271
  • 2014年10月15日 17:13
  • 2468

JDK的dt.jar和Java BeanInfo接口

在JAVA_HOME/lib下面有两个比较重要的jar文件,tools.jar和dt.jar。 tools.jar在上篇文章中做了简单的介绍。这里来介绍下dt.jar。 在Oracle官方网站搜d...
  • chen517611641
  • chen517611641
  • 2014年11月11日 11:00
  • 1695

JAVA内省JavaBean(Introspector、BeanInfo和PropertyDescriptor)

JavaBean是一个特殊的java类,主要用于传递数据信息 (在我的博客"黑马程序员_android之SQLite项目分析 "中提到绘制表格时将读取数据库的数据写到了 一个Information类中...
  • rainmeterlinux
  • rainmeterlinux
  • 2012年12月06日 20:24
  • 946

Introspector、BeanInfo的用法,不知与Class有何区别

 BeanInfo info = Introspector.getBeanInfo( connections.getClass() );//在 Java Bean 上进行内省,了解其所有属性、公开的方...
  • kubete
  • kubete
  • 2009年08月28日 17:29
  • 5126

JavaAPI之BeanInfo接口

结构 java.beans 接口 BeanInfo 所有已知子接口: BeanContextServiceProviderBeanInfo 所有已知实现类: SimpleBeanInfo 描述 ...
  • u010142437
  • u010142437
  • 2016年06月10日 00:22
  • 695

Java高新技术之JavaBean(内省 IntroSpector)

一、Javabean 1.JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。 如果要在两个模块之间传递多个信息,...
  • a859522265
  • a859522265
  • 2012年01月12日 09:51
  • 6226

JAVA内省(Introspector)

'ɪntrəspektɜ 什么是Java内省:内省是Java语言对Bean类属性、事件的一种缺省处理方法。 Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作...
  • x605940745
  • x605940745
  • 2014年03月01日 23:29
  • 3366

利用BeanMap进行对象与Map的相互转换

javabean与map的转换有很多种方式,比如: 1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b...
  • q358543781
  • q358543781
  • 2015年12月04日 16:55
  • 22494

Java 中 Map与JavaBean之间的相互转化

在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值。 那现在就...
  • chenxuejiakaren
  • chenxuejiakaren
  • 2012年07月19日 14:26
  • 28006

JavaBean与Map的相互转换

我们都知道,JavaBean中的属性的结构是这样的: 属性名=属性值 这个结构跟Map集合中的数据结构极其相似: Key=value 那么,问题来了,我们是否可以将Map转换为JavaBean...
  • caidie_huang
  • caidie_huang
  • 2016年08月30日 21:15
  • 2409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 使用BeanInfo实现bean实体与map之间的互相转换
举报原因:
原因补充:

(最多只允许输入30个字)