commons-beanutils包,有重要的几个使用频率高的工具类,分别是
- BeanUtils针对实体JavaBean的属性对象的操作工具类
- PropertyUtils通过反射对对象的属性做各种操作
- MethodUtils针对反射对象的工具类
- ConvertUtils针对数据类型相互转换
Maven引入
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
一、BeanUtils:
1.使用场景
- beanUtils对javaBean的属性或属性对象进行赋值
- beanUtils获取javaBean属性
- beanUtils克隆javaBean
- beanUtils将javaBean转换为Map
- beanUtils将Map转换为javaBean
- beanUtils获取javaBean的数组集合字段值
- beanUtils获取javaBean的Map字段值
- beanUtils获取javaBean的嵌套字段值
注意点:
BeanUtils.copyProperties 相同的属性赋值 会被覆盖。
2.使用频率多的方法
//将Map转换成对象(json组件中,将大量使用该方法,用于json与javaBean的互相转换)
void populate(final Object bean, final Map<String, ? extends Object> properties)
//设置属性值
static void setProperty(final Object bean, final String name, final Object value)
//获得属性值作为字符串返回
static String getProperty(final Object bean, final String name)
...还有很多大同小异的方法,请自行参考
二、PropertyUtils
通过反射对对象的属性做各种操作,一般包括set与get的操作;
1. 使用场景
当目标实体类,经过泛型的T的,作为参数传入等,在操作相关属性的时候,就能通过该工具类进行方便的读取与赋值指定属性。
精益编程中,关于MVC增强模块中,大量对该工具类使用,通过反射机制对
未确定具体类
的操作,能解决掉一些:通用的方法调用的情况
2.使用频率多的方法
//获得嵌套属性,属性是对象的情况
getNestedProperty(final Object bean, final String name)
//获得属性
getProperty(final Object bean, final String name)
//获取属性描述
getPropertyDescriptor(final Object bean,final String name)
//获得属性类型
static Class<?> getPropertyType(final Object bean, final String name)
//判断是否为可读属性
static boolean isReadable(final Object bean, final String name)
//判断是否为可写属性
static boolean isWriteable(final Object bean, final String name)
//设置属性值
static void setProperty(final Object bean, final String name, final Object value)
//设置属性值
static void setSimpleProperty(final Object bean, final String name, final Object value)
更多方法,请前往该类进行查看,根据实际情况进行查看是否有可用的方法
三、MethodUtils
1. 使用场景
反射操作,执行一个类的特定的方法
invokeMethod(final Object object,final String methodName,final Object arg)
//还有很多类型的方法,请使用的时候,多多参考
四、ConvertUtils
提供了数据类型相互转换的一些方法,对转换提供比较方便的转换安全方法。
五、总结
- 我们在使用一些通用的工具类的时候,需要总结一下经验,为自己编写特有的工具类,做好一些参考。
- 工具类一般有一些共同的特征:
- 提供的方法一般都是static的方法,方便使用
- 一些方法参数,就是待操作的对象,要理解java的值传播的特性(简单来说就是:作为参数传播对象[非基础类型]的,都是传播对象的引用,方法中对该引用进行操作,实际是全局修改这个对象)
- 方法一般分为:通用方法与特有数据类型的方法
- 通用方法:一般就是传入泛型,Class类型的方法,使用的时候,根据传入参数对象,则操作不同对象类型,灵活通用;
特有数据类型方法:一般都是制定数据类型,用于操作特点数据类型进行的方法,可以参考fastjson2中的JSONObject就能看出一二;
- 通用方法:一般就是传入泛型,Class类型的方法,使用的时候,根据传入参数对象,则操作不同对象类型,灵活通用;
- 对于一些跟业务关系密切,而且经常重复使用的一些方法,可以考虑分拆出来,组成工具类,有利于统一管理。