我们知道在MVC开发过程中,各个层之间往往有不同的对象在函数调用中传递,而这些对象虽然类型不同,但往往是有很多相同的属性,典型的比如数据库能查到很多数据,但在服务层我们需要用的只是其中一部分,或者我们希望给用户展示/暴露的只是一部分,那么在这种场景下,我们就需要bean拷贝工具类(当然你也可以直接写get,set,这样性能也很好,但却给开发与维护带来了许多不便)。
主流的bean拷贝实现大致有 Apache BeanUtils ,Spring BeanUtils,cglib BeanCopier,Hutool BeanUtil,Mapstruct…
除了Apache那个不太推荐(性能太差了),其他基本都可以用。
从实现层面,Apache BeanUtils ,Spring BeanUtils,Hutool BeanUtil都是基于反射实现的,cglib BeanCopier相比前面三个性能会更好(底层用ASM做动态代理),Mapstruct则更狠,在编译期生成代码,性能比前面几个都要好。
代码
为了不引入额外的依赖,我直接用了spring的BeanUtils
进一步,为了更便于使用,我们可以对其做一层简单包装
public static <V> V copyBean(Object source,Class<V> clazz) {
V result = null;
try {
result = clazz.newInstance();
BeanU