栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【项目实训】Bean拷贝工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【项目实训】Bean拷贝工具类

我们知道在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 copyBean(Object source,Class clazz) {
        V result = null;
        try {
            result = clazz.newInstance();
            BeanUtils.copyProperties(source, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

需要注意的是BeanUtils.copyProperties的实现用的是PropertyDescriptor来获取bean的getter,setter方法,所以你要用它来做拷贝,类得有相应的getter,setter方法

此外,它是浅拷贝,并且不支持集合类型

于是为了便于对List做对象转换拷贝,利用jdk8的stream来写如下工具方法

public static  List copyBeanList(List list,Class clazz){
        return list.stream()
                .map(o -> copyBean(o, clazz))
                .collect(Collectors.toList());
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号