前言介绍:
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(从配置文件中读取到到的字符串值)
BeanUtils。copyProperties(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;}