Java工具类 BeanUtils库介绍以及对象拷贝

举报
Java李杨勇 发表于 2022/08/31 20:33:07 2022/08/31
【摘要】 前言介绍:BeanUtils工具由Apache软件组织编写,提供给我们开发者使用主要解决的问题是:把对象的属性数据封装到对象中。我们在开发中经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中读取到的数据都是String,但是很显然我们的应用程序中不仅仅有String一种数据类型,比如:基本数据类型(int、double、char、float等),还有自定义数据类型(引用数据...

前言介绍:

BeanUtils工具由Apache软件组织编写,提供给我们开发者使用

主要解决的问题是:把对象的属性数据封装到对象中。我们在开发中经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中读取到的数据都是String,但是很显然我们的应用程序中不仅仅有String一种数据类型,比如:基本数据类型(int、double、char、float等),还有自定义数据类型(引用数据类型)

面临的一个问题就是讲字符串类型转换为各种具体的数据类型,该怎么办呢?

有两种方法解决:

1.首先判断需要的数据类型,然后对字符串类型调用相应的方法,将其转换为我们想要的类型

2. 使用BeanUtils工具

上面的两种方法,第一种存在的问题是太过于繁琐,每次都要进行大量的类型转换,Apache软件基金会给我们提供了第二种方法,使用其提供的BeanUtils工具,具体的说只需要知道其中的两个方法就能实现类型的转换,很简单,降低了编程的难度。

使用步骤:

导入jar: 要想使用别人开发的工具必须将其jar包导入到程序中。

<dependency>
     <groupId>commons-beanutils</groupId>
     <artifactId>commons-beanutils</artifactId>
     <version>1.9.0</version>
</dependency>

主要方法:

Beanutils工具在使用时几乎只用到以下几个方法.

BeanUtils.setProperty(bean, name, value);

其中bean是指你将要设置的对象,name指的是将要设置的属性(写成”属性 名”),value(从配置文件中读取到到的字符串值)

BeanUtilscopyProperties(bean, name, value)

和上面的方法是完全一样的。使用哪个都可以。

ConvertUtils.register(Converter converter , ..)

当需要将String数据转换成引用数据类型(自定义数据类型时),需要使用此方法实现转换。

BeanUtils.populate(bean,Map)

其中Map中的key必须与目标对象中的属性名相同,否则不能实现拷贝。

BeanUtils.copyProperties(newObject,oldObject)

实现对象的拷贝

具体使用:

根据业务场景进行对象的拷贝赋值以及拆分等

 public TopicErrMsVO getDetails(Long id) {
        TopicErrMs topicErrMs = this.get(id);
        TopicErrMsVO errMsVO = new TopicErrMsVO();

        BeanUtils.copyProperties(topicErrMs, errMsVO);
        User user = userBiz.get(topicErrMs.getUserId());

        UserVo userVo = new UserVo();

        userVo.setOrgName(orgBiz.get(user.getOrgId()).getName());
        BeanUtils.copyProperties(user, userVo);
        errMsVO.setUserVo(userVo);

        Topic topic = topicBiz.get(topicErrMs.getTopicId());
        TopicVO topicVO = new TopicVO();
        topicVO.setTopicType(TopicTypeEnum.getByCode(topic.getTopicType()).getName());
        topicVO.setSourceName(SourceEnum.getByCode(topic.getSourceName()).getName());
        //单选题
        String topicType = topic.getTopicType().toString();
        if (topicType.equals(ExamConstants.TOPIC_TYPE_2) || topicType.equals(ExamConstants.TOPIC_TYPE_3)) {
            String selectItems = topicSelectBiz.get(topic.getId()).getSelectItems();
            String[] arr = selectItems.split("&");
            topicVO.setSelectItems(arr);
        }
        BeanUtils.copyProperties(topic, topicVO);
        errMsVO.setTopicVO(topicVO);

        return errMsVO;
    }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。