小结以上简要的分析两种BeanUtils,因为Apache下的BeanUtils性能较差,不建议使用,可以使用 Spring的BeanUtils,或者使用其他拷贝框架,比如 cglib BeanCopier,基于javassist的Orika等,这些也是非常优秀的类库,值得去尝试。
Spring 的 BeanUtils 通常被认为在性能上进行了优化,并且与 Spring 框架的其他部分集成得更好。 Spring BeanUtils基本使用 基本使用很简单,这里就不演示了,主要是熟悉下API即可。 可以看下面的链接。 Spring - Copying properties using BeanUtils Code 请注意看注释 忽略了属性类型导致拷贝失败 同一字段在不同的类中...
第一步就是先本着实事求是的原则去探求一下大家总结出来的性能差异是否正确。 比较的是四种复制的方式,分别为Apache的BeanUtils和PropertyUtils,Spring的BeanUtils,Cglib的BeanCopier。做法是在Eclipse新建了一个Project,专门用于专门测试几种代码的性能。具体的代码如下: 一个FromBean和一个ToBean,两个的代码基本上一样,...
并且发现了他卓越的性能,毫无疑问可以抛弃 Spring 和 Apache 的 BeanUtils 了。
Spring BeanUtils源码分析 背景 在我们着手一个Java Web项目的时候,经常会遇到DO、VO、DTO对象之间的属性拷贝,若采用get、set的方法来进行赋值的话,代码会相当冗长丑陋,一般我们会采用Spring的BeanUtils类来进行属性拷贝,其基本原理就是通过Java的反射机制,下面我们来看一下源码的具体实现。
类型转换:BeanUtils还提供了类型转换功能,能够自动将一种类型的属性值转换为另一种类型,前提是这种转换是安全的和可接受的。 使用场景: 适用于简单的属性复制,但性能上可能不如直接编码或使用更专业的映射库。 示例: Apache Commons BeanUtils 提供了一个简单的方法来复制两个 JavaBean 之间的属性。它要求源对象和目...
由于Apache的BeanUtils的性能很差,强烈不建议使用。阿里巴巴Java开发规约插件上也明确指出: “Ali-Check| 避免用Apache Beanutils进行属性的copy。” Spring的BeanUtils方法 Spring的BeanUtils方法注意事项 1.BeanUtils是浅拷贝。 2.泛型只在编译期起作用,不能依靠泛型来做运行期的限制; ...
name=name;}}0 在5.3.0之前没有泛型的判断,所以通过反射的方法赋值会出现实际的类型与声明的不一致。总结BeanUtils.copyProperties()更适合简单Bean之间拷贝,如果Bean属性复杂,很容易因为浅拷贝导致一系列的问题。而且copyProperties方法实现过程并不简单,相对于直接用get和set方法赋值,其性能开销更大。
Apache的BeanUtils、Spring的BeanUtils、Mapstruct三者的性能测试 仍然使用上面两个实体类:User 和 UserDto 测试代码如下: import cn.kt.mapstructdemo.domin.User; import cn.kt.mapstructdemo.service.dto.UserDto; import cn.kt.mapstructdemo.service.mapstruct.UserMapper; ...