`

反射工具类 (利用反射 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
--------------------------------------------------------------------------
分享到:
评论

相关推荐

    通过java反射实现map与bean之间互转

    在给定的标题“通过java反射实现map与bean之间互转”中,我们要探讨的是如何利用Java反射机制将Map对象转换为Java Bean对象,以及反过来,将Java Bean对象转换为Map对象。这个过程在数据处理和序列化中非常常见。 ...

    java Map转换成bean,利用java反射以及java和bean包

    `mapToBean`方法接受一个Map和目标Bean的Class对象,首先检查参数是否有效,然后创建一个新的Bean实例,遍历Map中的每一个键值对,通过反射找到Bean中对应的Field,设置其可访问,最后调用`set()`方法设置属性值。...

    JAVA动态对象装配实现 测试--初步实现bean的set/get功能

    通过`DYNC_Object.java`的示例,我们可以学习如何利用反射来实现bean的`set`和`get`操作,这为我们提供了更大的程序设计自由度,使得代码能够适应不断变化的需求。理解并熟练掌握这一技术,对于提升Java开发能力非常...

    map与Javabean相互转换实例

    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;(); Class&lt;?&gt; clazz = bean.getClass(); for (Field field : clazz.getDeclaredFields()) { field.setAccessible(true); map.put(field.getName(), field.get(bean)); ...

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

    Java Bean对象和Map相互转换.zip

    myBean.getClass().getMethod("set" + key.toString().substring(0, 1).toUpperCase() + key.toString().substring(1), beanMap.get(key).getClass()).invoke(myBean, beanMap.get(key)); } ``` 此外,提供的`...

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名...

    Java基础将Bean属性值放入Map中的实例

    Java基础将Bean属性值放入Map中的实例 Java基础将Bean属性值放入Map中的实例是指将Java对象的属性值以属性名称为键,存储到Map中的简单实现。该实现包括自身属性及从父类继承得到的属性。 Java类型的getField[s]...

    基于Java反射的map自动装配JavaBean工具类设计示例代码

    基于Java反射的map自动装配JavaBean工具类设计示例代码 标题 :"基于Java反射的map自动装配JavaBean工具类设计示例代码" 在 Java 开发中,经常需要将 Map 对象自动装配到 JavaBean 对象中,例如在使用 MyBatis 时...

    BeanUtilities工具类使用jar包

    `BeanUtilities`就属于这个库中的一个类,它提供了许多方法来帮助我们方便地操作Java Bean,例如复制Bean的属性、设置和获取属性值等。这个库依赖于`commons-collections.jar`,因为BeanUtils在处理Bean时会用到一些...

    将List集合中的map对象转为List&lt;对象&gt;形式实例代码

    将List集合中的map对象转为List&lt;对象&gt;形式需要使用Java的反射机制和BeanUtils工具类。 下面是将List集合中的map对象转为List&lt;对象&gt;形式的实例代码: 首先,需要定义一个EntityBean类,该类中包含了两个方法:parse...

    java 8如何自定义收集器(collector)详解

    根据业务需求,我们需要将一个容器 `List&lt;Bean&gt;` 按照一定的字段进行分组,分组过后的值为特定的 BEAN 里面的属性。我们可以自定义一个 Collector 来满足这个需求。 首先,我们需要定义一个 Collector 接口的实现类...

    beanutils 1.8 jar包+源码_阿锦—小白

    此外,`getProperty()`和`setProperty()`方法分别用于读取和设置Bean的属性值,这些方法可以自动处理类型转换,使得代码更具可读性和可维护性。 在BeanUtils 1.8.0中,还包含了对Java反射API的封装,使得开发者可以...

    Apache DBUtils使用总结

    Person person = runner.query(conn, "SELECT * FROM person WHERE id = 1", new BeanHandler&lt;&gt;(Person.class)); System.out.println(person.getName()); } catch (Exception e) { e.printStackTrace(); } ...

    xpath解析xml

    在本篇文章中,我们将深入探讨如何利用XPath来解析XML文件,并且会提及如何通过XPath操作Map集合,从而避免过多地生成Java Bean类。 首先,理解XML文档的结构至关重要。XML是一种标记语言,用于存储数据,其结构...

    使用java反射将结果集封装成为对象和对象集合操作

    二、利用反射将结果集封装成为对象或者集合 为了将结果集封装成为对象或者集合,我们可以使用 Java 反射机制。下面是一个简单的示例代码: ```java package coral.base.util; import java.beans....

    dozer(PDF)

    - **自定义get()和set()方法**:可以指定如何读取和设置属性值。 - **引用复制和自我映射**:支持将源对象本身作为目标对象进行映射。 - **超类映射**:如果源对象和目标对象具有共同的父类,则可以定义超类映射规则...

    BeanUtils的应用

    3. **属性操作**:`setProperty()`和`getProperty()`方法分别用于设置和获取Java Bean的属性值。`populate()`方法则可以批量设置对象的属性值,通常用于从请求参数填充Bean对象。 4. **类型转换**:`ConvertUtils`...

Global site tag (gtag.js) - Google Analytics