`

BeanUtils 的陷阱

阅读更多

由于BeanUtils 的美名远播,加之学艺不精;项目中想当然直接使用BeanUtils;结果华丽丽的掉进了陷阱;


且看下面场景:

1、待copy类

public class SiteSupplierTrade {

    private Long      longAttr;
    private String[]  StringArrayAttr;
    private Integer  integerAttr;
    private String    StringAttr;
    //set  get
}

 2、copy类

public class SiteSupplierTradeCopy {

    private Long     longAttr;
    private String[] StringArrayAttr;
    private Integer  integerAttr;
    private String   StringAttr;
    // set  get
}

3、copy

 public static void main(String[] args) {

        SiteSupplierTrade siteSupplierTrade = new SiteSupplierTrade();
        if (null != siteSupplierTrade) {
            SiteSupplierTrade siteSupplierTrade2 = new SiteSupplierTrade();
            SiteSupplierTradeCopy SiteSupplierTrade3 = new SiteSupplierTradeCopy();
            try {
                BeanUtils.copyProperties(siteSupplierTrade2, siteSupplierTrade);
                BeanUtils.copyProperties(SiteSupplierTrade3, siteSupplierTrade);
            } catch (Exception e) {
            }
            System.out.println(siteSupplierTrade2);
            System.out.println(SiteSupplierTrade3);
            try {
                PropertyUtils.copyProperties(siteSupplierTrade2, siteSupplierTrade);
                PropertyUtils.copyProperties(SiteSupplierTrade3, siteSupplierTrade);
            } catch (Exception e) {
            }
            System.out.println(siteSupplierTrade2);
            System.out.println(SiteSupplierTrade3);
        }
    }

 
4、结果:

SiteSupplierTrade[longAttr=0,StringArrayAttr={},integerAttr=0,StringAttr=<null>]
SiteSupplierTradeCopy[longAttr=0,StringArrayAttr={},integerAttr=0,StringAttr=<null>]

SiteSupplierTrade[longAttr=<null>,StringArrayAttr=<null>,integerAttr=<null>,StringAttr=<null>]

SiteSupplierTradeCopy[longAttr=<null>,StringArrayAttr=<null>,integerAttr=<null>,StringAttr=<null>]


5、结论:

1)、熟悉BeanUtils PropertyUtils的知道,这两兄弟的区别就是BeanUtils 会做类型转换,PropertyUtils不会,自然前者性能不如后者;

2)、其实还有一个副作用,观察结果标红的部分,发现BeanUtils 会将long、integer 初始化为0,string[]初始化为空数组,而不是copy一个null;

3)、对于依赖为空判断的应用来说就是一个悲剧。

 

 

本站支持 pay for your wishes

分享到:
评论

相关推荐

    commons-beanutils-1.9.4

    Apache Commons BeanUtils是Java开发中一个非常重要的工具库,它为开发者提供了大量便捷的JavaBean操作功能。在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目...

    commons-beanutils-1.9.4-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    commons-beanutils-1.8.3和commons-beanutils-1.8.0

    Apache Commons BeanUtils是Java开发中的一个实用工具库,主要用于处理JavaBeans对象,简化对JavaBean属性的操作。这个库提供了一套方便的API,使得开发者可以通过简单的API调用来获取、设置JavaBean的属性,甚至...

    BeanUtils_beanutils_

    BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:

    commons-beanutils-1.8.0

    《Apache Commons BeanUtils 1.8.0:深入解析与应用》 Apache Commons BeanUtils库是Java开发中不可或缺的一部分,尤其对于那些频繁处理JavaBeans属性的开发者来说。它提供了便捷的方式来操作Java对象的属性,极大...

    Commons BeanUtils 1.8.3 API

    Apache Commons BeanUtils 1.8.3 是一个强大的Java库,专为简化Java Bean操作而设计。这个API提供了大量的实用工具方法,使得开发者能够更加便捷地处理Java对象,特别是那些符合Java Bean规范的对象。在Java编程中,...

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

    BeanUtils是Apache Commons项目中的一个核心库,主要提供了一组工具方法来简化Java Bean的操纵。这个1.8版本的jar包和源码是开发者在处理Java对象属性时的得力助手,尤其对于那些需要频繁进行对象属性设置和获取的...

    beanutils的jar包

    Apache Commons BeanUtils是Java开发中一个非常实用的工具库,主要功能是简化JavaBean对象的操作。这个"beanutils的jar包"是1.93版本,它包含了对bean操作的各种方法,同时也集成了log包,方便开发者进行日志记录,...

    commons-beanutils 源码

    《深入解析Apache Commons BeanUtils源码》 Apache Commons BeanUtils是Java开发中广泛使用的工具库,主要用于处理JavaBean对象的属性操作。这个库的核心功能在于简化了JavaBean对象的属性设置、获取以及复制等操作...

    beanutils-1.8.3开发包

    Apache BeanUtils库是Java开发中的一个关键工具,它在标题"beanutils-1.8.3开发包"中被提及,表明这是一个针对该版本的BeanUtils的完整开发资源集合。这个包提供了对JavaBeans属性操作的强大支持,简化了对象属性的...

    commons-beanutils-1.9.4.jar.zip

    Apache Commons BeanUtils是Java开发中的一个实用库,它提供了对JavaBeans属性的简便操作。这个库简化了在对象之间复制属性、处理集合以及调用JavaBean方法的过程。在这个"commons-beanutils-1.9.4.jar.zip"压缩包中...

    commons-beanutils-1.9.2下载

    Apache Commons BeanUtils是Java开发中的一个实用工具库,它提供了对JavaBeans进行操作的便捷方法。这个库的主要目的是简化对对象属性的访问,使得开发者能够更高效地处理对象的属性设置和获取,而无需手动编写大量...

    commons-beanutils-1.8.2-src官方源文件,是你学习beanutils工具的必备资料

    Apache Commons BeanUtils是Java开发中一个非常重要的工具库,它为开发者提供了方便的Java Bean操作接口。这个"commons-beanutils-1.8.2-src"官方源文件包,是学习和理解BeanUtils核心功能的宝贵资源。在这个版本中...

    beanutils包

    《Apache Commons BeanUtils:构建网络框架的利器》 在Java编程领域,Apache Commons BeanUtils库是一个不可或缺的工具,尤其在构建网络框架时更是扮演着重要角色。BeanUtils库是Apache软件基金会开发的一个开源...

    beanutils 的jar包

    《BeanUtils:JavaBean操作利器》 在Java开发中,我们常常需要对JavaBean对象进行各种操作,如属性的设置、获取以及复制等。Apache Commons BeanUtils库正是为了解决这些问题而诞生的,它提供了简单易用的API,极大...

    commons-beanutils-1.9.4-API文档-中英对照版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    BeanUtils-jar包

    《BeanUtils-jar包:JavaBean操作的利器》 在Java开发中,BeanUtils-jar包扮演着重要的角色,它是Apache Commons项目中的一个模块,主要为开发者提供了方便、高效的JavaBean操作工具。这个jar包的核心功能是简化了...

    org.apache.commons.beanutils.jar

    《Apache Commons BeanUtils详解》 Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一组实用工具类,用于简化JavaBean对象的操作。这个库的核心是`org.apache.commons.beanutils`包,其中包含...

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

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

Global site tag (gtag.js) - Google Analytics