阿里巴巴产品页面怎么改代码?我想修改产品源代码里面的标题和关键词,有人说改不了,但有些公司又改到了

阿里巴巴产品页面怎么改代码?我想修改产品源代码里面的标题和关键词,有人说改不了,但有些公司又改到了,第1张

有一次开发过程中,刚好看到小伙伴在调用 set 方法,将数据库中查询出来的 Po 对象的 属性拷贝 到 Vo 对象中,类似这样:

可以看出,Po 和 Vo 两个类的字段绝大部分是一样的,我们一个个地调用 set 方法只是做了一些重复的冗长的 *** 作。 这种 *** 作非常容易出错,因为对象的属性太多,有可能会漏掉一两个,而且肉眼很难察觉

类似这样的 *** 作,我们很容易想到可以通过反射来解决。其实,如此普遍通用的功能,一个 BeanUtils 工具类就可以搞定了。

于是我建议这位小伙伴了解一下 BeanUtils,后来他使用了 Apache BeanUtilscopyProperties 进行属性拷贝,这为程序 挖了一个坑

当我们开启阿里代码扫描插件时,如果你使用了 Apache BeanUtilscopyProperties 进行属性拷贝,它会给你一个 非常严重的警告 。因为, Apache BeanUtils性能较差,可以使用 Spring BeanUtils 或者 Cglib BeanCopier 来代替

看到这样的警告,有点让人有点不爽。大名鼎鼎的 Apache 提供的包,居然会存在 性能问题 ,以致于阿里给出了严重的警告。

那么,这个 性能问题究竟是有多严重 呢?毕竟,在我们的应用场景中,如果只是很微小的性能损耗,但是能带来非常大的便利性,还是可以接受的。

带着这个问题。我们来做一个实验,验证一下。

如果对具体的测试方式没有兴趣,可以 跳过直接看结果 哦~

测试方法接口和实现定义

首先,为了测试方便,让我们来定义一个接口,并提供各种实现:

单元测试

然后写一个参数化的单元测试:

测试结果

结果表明, Cglib 的 BeanCopier 的拷贝速度是最快的 ,即使是百万次的拷贝也只需要 10 毫秒! 相比而言,最差的是 Commons 包的 BeanUtilscopyProperties 方法,100 次拷贝测试与表现最好的 Cglib 相差 400 倍 之多。百万次拷贝更是出现了 2600 倍的性能差异!

结果真是让人大跌眼镜。

但是它们为什么会有这么大的差异呢?

原因分析

查看源码,我们会发现 CommonsBeanUtils 主要有以下几个耗时的地方:

具体的性能和源码分析,可以参考这几篇文章:

几种copyProperties工具类性能比较:>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12675781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存