commons-beanutils 对象属性处理

在Java的业务代码开发中,经常要对JavaBean进行一些啰嗦的操作,比如一行行的a.setXXX(b.getXXX())commons-beanutils提供了一组用于JavaBean操作的工具类,能够简化我们的代码,尤其是对一些历史遗留问题代码,能够改善代码可读性、充分解耦。当然,此类工具大量依赖反射操作,还有自动类型转换等额外处理,性能肯定不如直接硬编码,我们在开发过程中,这一点需要时刻结合应用场景来考虑。

注:据说commons-beanutils中的最常用的BeanUtils代码臃肿、性能较差,很多人推荐使用Spring自带的BeanUtils作为替代。这里我们只是学习一下其设计思路,我们完全可以用反射自己封装类似的功能,具体就不深究了。

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

对象属性拷贝

我们可以使用BeanUtilsPropertyUtils进行任意两个对象之间的属性拷贝。

BeanUtils.copyProperties(Object dest, Object orig)

该方法能够将对象orig中的字段浅拷贝到对象dest中,拷贝的规则为字段名相同,要求字段具备get\set方法。

下面代码中,CustomerCustomerVo具有部分相同名字的字段,copyProperties()方法能够实现从customer拷贝属性到customerVo

Customer customer = new Customer();
customer.setCustId(198l);
customer.setAge(23);
customer.setName("测试客户");
customer.setRemark("已拉黑");
customer.setAddress("噜啦啦街");

CustomerVo customerVo = new CustomerVo();

BeanUtils.copyProperties(customerVo, customer);

注意:

  • PropertyUtils也有一个copyProperties方法,用法基本相同,唯一的区别是BeanUtils会对8个基本类型进行自动转换,我们使用时可以根据需求自行选择。

对象和Map互转

这类方法一般用于一些历史遗留代码,比如一个很古老的项目函数之间传参全用Map,直接通过对象和Map互转工具,能够很方便的实现对这类代码的再次封装。

对象转Map:

PropertyUtils.describe(Object bean)

该方法返回Map<String, Object>

注意:

  • BeanUtils也有一个describe方法,用法基本相同,但返回值是Map<String, String>,其内部会自动进行类型转换,我们使用时可以根据需求自行选择。

Map转对象:

BeanUtils.populate(Object bean, Map<String, ? extends Object> properties)

该方法能够将Map中的值,拷贝到对应key名字的字段中,注意其会进行自动类型转换。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap