`

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

阅读更多
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();
                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
--------------------------------------------------------------------------
分享到:
评论

相关推荐

    List转换为List

    List&lt;Bean&gt;转换为List&lt;Map&gt;, List&lt;Object&gt;转换为List&lt;Object&gt; list转化为 JsonArray ,list转换JsonArray

    List<Map>转化为List工具类

    一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List&lt;Map&lt;String, Object&gt;&gt;结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List&lt;Map&lt;String, Object&gt;...

    深度转换Bean<->Bean的Mapper

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1879387

    filter对request请求拦截,对请求参数进行修改

    此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 &lt;!-- 特殊字符过滤 --&gt; &lt;filter&gt; &lt;filter-name&gt;sqlFilter...

    java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

    &lt;br&gt;jad -sjava -r -8 -o **\*.class &lt;br&gt;&lt;br&gt;---------------&lt;br&gt;This is README file for Jad - the fast Java Decompiler.&lt;br&gt;Jad home page: http://www.kpdus.com/jad.html&lt;br&gt;Copyright 2001 Pavel Kouznetsov...

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,Spring+Quartz调度,FunctionCharts图像化工具

    &lt;bean id="temperMonitorTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt; &lt;!-- 调用的类 --&gt; &lt;property name="targetObject"&gt; &lt;ref bean="temperMonitorTimerJob"/&gt; ...

    ASP与SQL网页数据库程序设计

    第1章 架设网站……………………………….1&lt;br&gt;1-1 服务器的选用 2&lt;br&gt;1-2 安装或升级IE的版本 3&lt;br&gt;1-3 安装IIS 6&lt;br&gt;1-4 测试及设置 12&lt;br&gt;第2章 编辑器的选用………………………..17&lt;br&gt;2-1 编辑软件的需求 18&lt;br...

    Windows 脚本技术参考手册

    > 元素&lt;br&gt; <description> 元素&lt;br&gt; <example> 元素&lt;br&gt; <job> 元素&lt;br&gt; <named> 元素&lt;br&gt; <object> 元素&lt;br&gt; <package> 元素&lt;br&gt; <reference> 元素&lt;br&gt; <resource> 元素&lt;br&gt; <runtime> 元素&lt;br&gt;...

    Advanced WarCraft 3 Configurator

    &lt;br&gt;---WAR3修改工具;&lt;br&gt;---OpenGL模式(在一些电脑上增加别的模式);&lt;br&gt;---图象比例调整;&lt;br&gt;---皮肤颜色的选择;&lt;br&gt;---多种语言选择;&lt;br&gt;---提示优化技巧和帮助;&lt;br&gt;---包含PING探测功能的网关编辑器&lt;br&gt;-...

    《嵌入式系统开发圣经(第二版)》电子版

    236&lt;br&gt;3-8 总览 238&lt;br&gt;第4章 信息家电软件的大趋势 239&lt;br&gt;4-1 多采多姿的Java世界 240&lt;br&gt;4-1-1 Java的概念 240&lt;br&gt;4-1-2 Java世界 243&lt;br&gt;4-1-3 企业版J2EE 243&lt;br&gt;4-1-4 标准版J2SE 245&lt;br&gt;4-1-5 袖珍版J2ME ...

    netcat

    &lt;br&gt;-h 帮助信息 &lt;br&gt;-i secs 延时的间隔 &lt;br&gt;-l 监听模式,用于入站连接 &lt;br&gt;-L 连接关闭后,仍然继续监听 &lt;br&gt;-n 指定数字的IP地址,不能用hostname &lt;br&gt;-o file 记录16进制的传输 &lt;br&gt;-p port 本地端口号 &lt;br&gt;-r ...

    FontEditor

    将Windows系统安装的TTF,OTF导入为BDF,FNT,FNB格式&lt;br&gt;&lt;br&gt;&lt;br&gt;本软件的版权属厦门恒日丰科技有限公司所有,联系方式:&lt;br&gt;电话 :0592-5612340,5612040&lt;br&gt;Email :hrftech@gmail.com&lt;br&gt;QQ :867768078,897950972

    坐标转换工具(地理坐标经纬度)

    北京54,西安80,WGS等,3度,6度带转换

    将list转换成JavaBean

    将list&lt;Map&gt;转换成JavaBean的工具类

    快速搭建移动App服务器 (win+tomcat+轻开平台+access入门版)

    -- list属性参数表示输出为数组列表格式,end属性参数表示数组结束的位置(跟for的end值相等), nolast属性参数表示数组后边输出一个逗号--&gt; &lt;name&gt;@{item:name}&lt;/name&gt; &lt;price value&gt;@{item:price}&lt;/price&gt;&lt;!--...

    springweb-Jackson

    &lt;ref bean="mappingJacksonHttpMessageConverter" /&gt; &lt;ref bean="stringHttpMessageConverter" /&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; &lt;bean id="mappingJacksonHttpMessageConverter" class="org.springframework...

    C#编程经验技巧宝典

    10&lt;br&gt;&lt;br&gt;0023 如何添加引用第3方控件 11&lt;br&gt;&lt;br&gt;0024 如何生成DLL文件 11&lt;br&gt;&lt;br&gt;0025 如何使用不安全代码 11&lt;br&gt;&lt;br&gt;第2章 语言基础 13&lt;br&gt;&lt;br&gt;2.1 注释 14&lt;br&gt;&lt;br&gt;0026 如何对代码进行注释 14&lt;br&gt;...

    JSF1.2+EJB3.0实现的一个项目实例

    ejb端&lt;br&gt; jsfejb3-ejb&lt;br&gt; |-- src&lt;br&gt; |-- org.qiujy.ejb3.dao 持久层DAO接口包&lt;br&gt; |-- org.qiujy.ejb3.dao.impl 持久层DAO接口实现类包(是ejb3中的会话Bean)&lt;br&gt; |-- org.qiujy.ejb3.entity 实体域模型类包...

    jfreechart-1.0.4.jar jfreechart-1.0.4-swt.jar

    &lt;div align="cente"&gt;&lt;P&gt;&lt;font size="4" face="楷体_GB2312"&gt;&lt;strong&gt;&lt;font color="#0099ff"&gt;招生统计信息&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt; /p&gt; &lt;/div&gt; &lt;% //设置生成饼状图 int i=0; String[] area={"南京市","镇江市",...

Global site tag (gtag.js) - Google Analytics