,大家好,我是哪吒。,今天,通过代码实例、源码解读、四大工具类横向对比的方式,和大家一起聊一聊对象赋值的问题。,在实际的项目开发中,对象间赋值普遍存在,随着双十一、秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面。,答:想都不用想,直接代码走起来,get、set即可。,问:下图这样?,,答:对啊,你怎么能把我的代码放到网上?,问:没,我只是举个例子,答:这涉及到商业机密,是很严重的问题,问:我发现你挺能扯皮啊,直接回答问题行吗?,问:行了,行了,说说,怎么解决吧。,答:很简单啊,可以通过工具类Beanutils直接赋值啊,答:就Apache自带的那个啊,贼简单。我手写一个,给你欣赏一下。,,问:你这代码报错啊,避免用Apache Beanutils进行属性的copy。,答:没报错,只是严重警告而已,代码能跑就行,有问题再优化呗,答:拿多少钱,干多少活,我又不是XXX,应该是性能问题吧,问:具体什么原因导致的呢?,答:3000块钱还得手撕一下 apache copyProperties 的源代码呗?,通过单例模式调用copyProperties,但是,每一个方法对应一个BeanUtilsBean.getInstance()实例,每一个类实例对应一个实例,这不算一个真正的单例模式。,通过源码可以看到,每一个copyProperties都要进行多次类型检查,还要打印日志。,再通过jvisualvm.exe检测一下运行情况,果然,logging.log4j赫然在列,稳居耗时Top1。,,不测不知道,一测吓一跳,差的还真的多。,spring cglib BeanCopier性能最好,apache BeanUtils性能最差。,性能走势 –> spring cglib BeanCopier 优于 spring copyProperties 优于 apache PropertyUtils 优于 apache BeanUtils,避免用Apache Beanutils进行属性的copy的问题 上面分析完了,下面再看看其它的方法做了哪些优化。,从源码可以清晰的看到,类型检查变成了非空校验,去掉了每一次copy的日志记录,性能肯定更好了。,DanyBean 提供了可以动态修改实现他的类的属性名称、属性值、属性类型的功能。,再通过jvisualvm.exe检测一下运行情况,果然,logging.log4j没有了,其他的基本不变。,阿里的友情提示,避免用Apache Beanutils进行对象的copy,还是很有道理的。,Apache Beanutils 的性能问题出现在类型校验和每一次copy的日志记录。,本文转载自微信公众号「哪吒编程」,可以通过以下二维码关注。转载本文请联系哪吒编程公众号。,
文章版权声明
1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/17950.html
2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈
3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)
4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别