Bean工具-BeanUtil
通常Java中对Bean的定义是包含setXXX和getXXX方法的对象,在Hutool中,采取一种简单的判定Bean的方法:是否存在只有一个参数的setXXX方法。
Bean工具类主要是针对这些setXXX和getXXX方法进行操作,比如将Bean对象转为Map等等。
方法
方法根据是否存在只有一个参数的setXXX方法来判定是否是一个Bean对象。这样的判定方法主要目的是保证至少有一个setXXX方法用于属性注入。
把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?外界使用的人不用不知道,这就称为内省。
Hutool中对内省的封装包括:
BeanUtil.getPropertyDescriptors
获得Bean字段描述数组BeanUtil.getFieldNamePropertyDescriptorMap
获得字段名和字段描述MapBeanUtil.getPropertyDescriptor
获得Bean类指定属性描述
CopyOptions的配置项包括:
editable
限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类。ignoreNullValue
是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入nullignoreProperties
忽略的属性列表,设置一个属性列表,不拷贝这些属性值
ValueProvider接口需要实现两个方法:
value
方法是通过key和目标类型来从任何地方获取一个值,并转换为目标类型,如果返回值不和目标类型匹配,将会自动调用Convert.convert
方法转换。containsKey
方法主要是检测是否包含指定的key,如果不包含这个key,其对应的属性将会忽略注入。首先定义一个bean:
然后注入这个bean:
同时,Hutool还提供了BeanUtil.toBean
方法,此处并不是传Bean对象,而是Bean类,Hutool会自动调用默认构造方法创建对象。
基于BeanUtil.fillBean
方法Hutool还提供了Map对象键值对注入Bean,其方法有:
BeanUtil.fillBeanWithMap
BeanUtil.mapToBean
BeanUtil.mapToBeanIgnoreCase
在Java Web应用中,我们经常需要将ServletRequest对象中的参数注入bean(http表单数据),BeanUtil类提供了两个便捷方法:BeanUtil.requestParamToBean
将http表单数据注入新建的Bean对象
BeanUtil.beanToMap
方法则是将一个Bean对象转为Map对象。
Bean之间的转换主要是相同属性的复制,因此方法名为copyProperties
。