`
simen_net
  • 浏览: 307043 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

BeanUtils.copyProperties应用的改进

阅读更多

在MVC的开发模式中经常需要将model与pojo的数据绑定,apache和spring的工具包中都有BeanUtils,使用其中的copyProperties方法可以非常方便的进行这些工作,但在实际应用中发现,对于null的处理不太符合个人的需要,例如在进行修改操作中只需要对model中某一项进行修改,那么一般我们在页面上只提交model的ID及需要修改项的值,这个时候使用BeanUtils.copyProperties会将其他的null绑定到pojo中去。为解决这个问题我重写了部分spring BeanUtils的代码如下

public abstract class BeanUtils extends org.springframework.beans.BeanUtils {

  public static void copyProperties(Object source, Object target) throws BeansException {
    Assert.notNull(source, "Source must not be null");
    Assert.notNull(target, "Target must not be null");
    Class<?> actualEditable = target.getClass();
    PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
    for (PropertyDescriptor targetPd : targetPds) {
      if (targetPd.getWriteMethod() != null) {
        PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
        if (sourcePd != null && sourcePd.getReadMethod() != null) {
          try {
            Method readMethod = sourcePd.getReadMethod();
            if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
              readMethod.setAccessible(true);
            }
            Object value = readMethod.invoke(source);
            // 这里判断以下value是否为空 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等
            if (value != null) {
              Method writeMethod = targetPd.getWriteMethod();
              if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
                writeMethod.setAccessible(true);
              }
              writeMethod.invoke(target, value);
            }
          } catch (Throwable ex) {
            throw new FatalBeanException("Could not copy properties from source to target", ex);
          }
        }
      }
    }
  }
}

 apahce的BeanUtils的处理方法类似

3
0
分享到:
评论
2 楼 hl174 2015-12-21  
执行不了  报错
1 楼 肖泽文 2014-02-20  
很好!!!

相关推荐

    BeanMapper:比BeanUtils.copyProperties更快

    一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在...

    java Beanutils.copyProperties( )用法详解

    Java Beanutils.copyProperties() 用法详解 Java Beanutils.copyProperties() 方法是 Java 中一个非常有用的工具,主要用于将一个 JavaBean 的属性复制到另一个 JavaBean 中。今天,我们将详细介绍 Java Beanutils....

    如何使用BeanUtils.copyProperties进行对象之间的属性赋值

    Spring框架提供的`BeanUtils.copyProperties`方法极大地简化了这个过程。本文将深入探讨如何使用`BeanUtils.copyProperties`进行对象间的属性赋值,并通过示例代码进行详细解释。 `BeanUtils.copyProperties`是...

    commons-beanutils.jar.zip

    1. **属性拷贝**:BeanUtils.copyProperties()方法可以实现两个JavaBean对象之间的属性值拷贝,极大地减少了代码量。 2. **动态属性访问**:通过BeanUtils.getProperty()和BeanUtils.setProperty(),我们可以动态地...

    BeanUtilsBean对象复制使用(类型可以自动转化)

    `BeanUtilsBean.copyProperties()`方法是实现此功能的关键,它允许我们将一个JavaBean的所有属性值复制到另一个具有相同属性的JavaBean中。 `BeanUtilsBean`的`copyProperties()`方法的工作原理如下: 1. **目标与...

    org.apache.commons.beanutils.jar

    3. **复制属性**:`copyProperties()`方法允许在两个JavaBean对象之间复制属性,极大地简化了数据迁移或对象克隆的过程。 4. **集合操作**:BeanUtils还提供了处理集合的方法,如`convert()`,可以将一个集合中的...

    [] - 2022-11-22 使用 BeanUtils.copyProperties 踩坑经历.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

    commons-beanutils-1.8.0.jar beanutils.jar beanutils.jar工具包

    commons-beanutils.jar下载

    commons-beanutils.jar commons-beanutils.jar

    commons-beanutils.jar

    标题中的"commons-beanutils.jar"就是这个库的实现文件,用于简化JavaBean对象的属性操作。当我们在处理JSON数据并尝试将这些数据绑定到Java对象时,可能会遇到因缺少这个库而导致的问题。 首先,Apache Commons ...

    BeanUtils.jar

    1. **属性复制**:BeanUtils.copyProperties()是其最常用的功能之一,它能将一个对象的所有属性值复制到另一个对象中,大大减少了手动赋值的工作。 2. **类型转换**:BeanUtils.setProperty()和BeanUtils....

    json用到的jar包(commons-beanutils.jar、commons-collections-3.1.jar等)

    json相关jar包(不使用springmvc开发时)。其中包含(commons-beanutils.jar、commons-collections-3.1.jar、commons-lang-2.6.jar、commons-logging.jar、ezmorph-1.0.6.jar、json-lib-2.2.3-jdk15.jar)

    org.apache.commons.beanutils.BeanUtils实例

    此为BeanUtils的实例。其中apache的包有一个小的BUG已在其中说明。

    commons.jar +commons-beanutils.jar

    标题中的"commons.jar +commons-beanutils.jar"指的是Apache Commons项目中的两个核心组件:commons.jar和commons-beanutils.jar。Apache Commons是Java编程语言中的一系列小型实用程序库,为开发人员提供了各种常见...

    commons-beanutils.jar+commons-logging.jar

    Apache提供的这个beanutils包极大方便了javabean的 操作。包含了最新的commons-beanutils-1.9.3.jar和api文档,以及其依赖的commons-logging-1.2.jar包

    commons-beanutils.jar、commons-logging.jar两个包

    beanUtils 方便访问javaBean 附带支持框架 logging jar包,Apache提供的这个beanutils包极大方便了javabean的 操作。包含了最新的commons-beanutils-1.9.3.jar,以及其依赖的commons-logging-1.2.jar包

Global site tag (gtag.js) - Google Analytics