`
beisicao
  • 浏览: 66515 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用java反射机制对多属性javabean赋值

阅读更多
public class ReflectMatch {  

//封装属性      
private Map<String,Field> fieldMap = new HashMap<String,Field();  
//封装属性的set方法
private Map<String,Method> methMap=new HashMap<String,Method>();  

/*c:为赋值对象,
  *values为给属性要赋的值,put('m1',1);put('m2',2),m1、m2等为属性     
  */
public  void setValue(Object c,Map values){  
    try{  
        Field[] fields = c.getClass().getDeclaredFields();  
              
        Method[] methods = c.getClass().getDeclaredMethods();  
                
         for(Field  field : fields){  
            String attri = field.getName();  
            fieldMap.put(attri.toLowerCase(), field);  
            for(Method method : methods){  
                String meth = method.getName();
               //匹配set方法
                if(meth != null   
                     && "set".equals(meth.substring(0, 3))  
                     && Modifier.isPublic(method.getModifiers())  
                     && ("set"+Character.toUpperCase(attri.charAt(0))+attri.substring(1)).equals(meth)){  
                     methodMap.put(attri.toLowerCase(), method);  
                          break;  
                    }  
                }  
            }  
              
         //2、属性赋值  
     for(Iterator it = values.keySet().iterator();it.hasNext();){  
           String name = (String)it.next();  
           String value = (String)values.get(name);  
                  
           if (value == null)  
                continue;  
           value = value.trim();  
           name = name.trim();  
                  
           Field field = fieldMap.get(name.toLowerCase());  
           if(field == null) continue;  
           Method method = methodMap.get(name.toLowerCase());  
                if (method == null) continue;  
                fill(c,field,method,value);  
         }  
              
     }catch(Exception e){  
       e.printStackTrace();  
     }  
  }  
      
    /** 
     * 将字符串值转换为合适的值填充到对象的指定域 
     * @param bean 被填充的java bean 
     * @param field 需要填充的域 
     * @param value 字符串值 
     */ 
    public static void fill(Object bean, Field field, Method method, String value){  
   if (value == null||"null".equalsIgnoreCase(value))
        return;  
 
    try{  
        Object[] oo = new Object[1];  
 
        String type = field.getType().getName();  
 
       if ("java.lang.String".equals(type)){  
             oo[0] = value;  
       }else if ("java.lang.Integer".equals(type)){  
         if (value.length() > 0) oo[0] = Integer.valueOf(value);  
       }else if ("java.lang.Float".equals(type)){  
          if (value.length() > 0) oo[0] = Float.valueOf(value);  
       }else if ("java.lang.Double".equals(type)){  
          if (value.length() > 0) oo[0] = Double.valueOf(value);  
       }else if ("java.math.BigDecimal".equals(type)){  
          if (value.length() > 0) oo[0] = new BigDecimal(value);  
       }else if("java.util.Date".equals(type)){  
          if (value.length() > 0) oo[0] = DateTimeUtil.create(value, "yyyy-mm-dd hh:mi:ss").toDate();  
      }else if("java.sql.Timestamp".equals(type)){  
          if (value.length() > 0) oo[0] = DateTimeUtil.create(value, "yyyy-mm-dd hh:mi:ss").toTimestamp();  
      }else if ("java.lang.Boolean".equals(type)){  
         if (value.length() > 0) oo[0] = Boolean.valueOf(value);  
      }else if("java.lang.Long".equals(type)){  
         if(value.length() > 0) oo[0] = Long.valueOf(value);  
      }  
 
        method.invoke(bean, oo);  
 
       }catch(Exception e){  
            e.printStackTrace();  
       }  
  }  
      
      
分享到:
评论

相关推荐

    利用反射实现JavaBean 的自动赋值

    对于后者,一种常见的做法是利用Java的反射机制来自动地将表单数据绑定到JavaBean对象上。 #### 反射简介 反射是Java提供的一种能够在运行时分析类的信息并操作类的成员(如方法、属性)的能力。通过反射,可以在...

    Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类

    工具类通过反射遍历JavaBean的所有公共属性,如果属性名与Map中的键匹配,就会调用对应的setter方法设置属性值。这样,我们只需要一行代码就能完成JavaBean的初始化,而无需手动写多个setter方法调用。 下面是一个...

    JAVA反射机制实例教程

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以访问和修改私有成员,调用私有方法,创建对象,以及对类、接口、字段和方法进行操作,极大地...

    javabean基础知识

    - **具有无参构造函数**:这是JavaBean的基本要求之一,确保可以通过反射等机制创建JavaBean实例。 - **使用get/set方法访问其属性**:JavaBean的属性通常遵循JavaBeans规范,即通过get和set方法来访问和修改。 ...

    javabean源码

    JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装数据并提供可重用的业务逻辑。在Java开发中,JavaBean被广泛应用于构建组件、数据传输以及MVC(Model-View-Controller)架构中的模型部分。这个压缩包文件...

    Java开发技术大全(500个源代码).

    listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的简单类 useArray1.java 用反射机制使用数组示例1 ...

    Java基础_第二阶段-day18每日作业卷1

    - **反射操作**:它利用Java的反射机制,自动寻找JavaBean的属性并进行操作。 - **简化代码**:避免了繁琐的属性赋值过程,提高了代码的可读性和简洁性。 2. **使用BeanUtils工具包的操作步骤**: - **导入依赖*...

    javabeanbeanutils

    3. **反射操作**:BeanUtils库利用Java的反射机制,能够在运行时动态地调用JavaBean的getter和setter方法,增强了代码的灵活性。 4. **处理集合**:对于集合类型的属性,BeanUtils可以方便地进行迭代和批量操作,如...

    java深度复制源代码

    - **反射机制**:该工具类大量使用了Java反射API(如`Introspector.getBeanInfo()`、`PropertyDescriptor`等)来获取和设置JavaBean的属性。 - **泛型**:使用了泛型`&lt;T&gt;`,使得该工具类可以应用于任意类型的...

    java bean 与 Web Form表单如何实现自动装配

    当找到匹配的属性时,我们使用反射调用对应的setter方法,将表单域的值转化为与Bean属性类型一致的数据,并赋值给Bean的属性。这个过程中可能需要进行类型转换,例如将字符串转换为整数、日期等。 在Struts2的模型...

    使用反射自动装填前台数据和struts自动装填很像

    Struts依赖于框架内部的机制和约定,而反射则更底层,提供了更多的灵活性,但同时也需要更精细的控制和更高的代码复杂度。在实际开发中,根据项目需求和团队规范,选择合适的方法进行数据装填是非常重要的。

    commons-beanutils-1.8.3.jar

    Apache Commons BeanUtils是Java开发中一个非常重要的工具库,它属于Apache Commons项目的一部分,旨在简化JavaBean对象的属性操作。在这个1.8.3版本的jar包中,包含了丰富的功能,使得开发者能够更加便捷地处理...

    java基础案例与开发详解案例源码全

    15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...

    Java发展史_&_Java9、10新特性

    Java 10对垃圾回收机制进行了优化,提高了效率,特别是针对短生命周期对象的回收。 - **JShell命令行工具** JShell是一个交互式的Java shell工具,允许开发者在命令行中即时编写和测试代码片段,这对于快速原型...

    BeanUtils包含源码和jar包, 包含BeanUtils和logging一套拿走,有源码和jar包

    开发者可以通过源码理解其内部机制,增强对Java反射和属性操作的理解;同时,可以直接使用jar包在项目中引入BeanUtils,提高开发效率。配合logging库,还能实现更完善的日志记录,为问题排查提供便利。

    BeanUtils.zip

    JavaBeanUtils是一个在Java开发中广泛应用的工具类库,主要由Apache Commons项目提供,用于简化对JavaBean属性的操作。在Java编程中,BeanUtils类扮演着重要的角色,极大地提高了开发者的工作效率。这个名为...

    xmlPares用户只需填参数就可解析

    在Android开发中,XML是...总的来说,“xmlPares”为Android开发提供了一种便捷的XML解析方案,通过反射机制简化了XML数据到Java对象的映射过程,使得开发者可以更加专注于业务逻辑的实现,而不是繁琐的数据解析工作。

    BeanUtils.jar

    BeanUtils.jar主要包含了Apache Commons BeanUtils库,这是一个基于Java反射机制的工具库,它提供了对JavaBean属性的便捷访问和操作。通过这个库,开发者可以避免编写大量的getter和setter方法,提高代码的可读性和...

    BeanUtils类库jar包和源码

    这个类库提供了许多实用方法,能够简化Java开发中的对象属性赋值和获取过程,极大地提高了开发效率。在Java后端开发中,尤其是在与数据库交互时,BeanUtils扮演了重要的角色。 首先,BeanUtils的核心功能在于属性的...

    commons-beanutils-1.8.0

    2. **反射操作(Reflection Utilities)**:BeanUtils库利用Java的反射API,能够动态地获取和设置JavaBean的属性。这意味着开发者无需预先知道对象的具体属性,只需要属性名称就能完成操作。 3. **类型转换(Type ...

Global site tag (gtag.js) - Google Analytics