BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。
- POM依赖
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
- 间接依赖jar包
package com.yuyin.beanUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
public class BeanTool {
public static void main(String[] args) {
register(null);
}
public static void register(Admin admin) {
try {
//?是通配符,cal表示可以指向任意Class类型对象
Class<?> cal = Class.forName("com.yuyin.beanUtils.Admin");
//Class<Integer> cla与Class<?> cl
//前一个表示cla只能指向Integer这种类型,而后一个cl表示可以指向任意类型。
//cla = Integer.class 可以,但cla = Double.class就不可以。
//但是cl = Integer.class 可以,cl = Double.class也可以 。
admin = (Admin) cal.newInstance();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (admin != null) {
try {
ConvertUtils.register(new DateLocaleConverter(Locale.getDefault(),"yyyy-MM-dd HH:mm"), Date.class);
BeanUtils.copyProperty(admin, "name", "王依依");
BeanUtils.setProperty(admin, "dept", "设计部");
BeanUtils.setProperty(admin, "birth", "1991-09-25 12:00");
//使用自带转化器转化时间格式
print(BeanUtils.getProperty(admin, "name"));
print(BeanUtils.getProperty(admin, "dept"));
print(BeanUtils.getProperty(admin, "birth"));
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
public static <T> void print(T message) {
System.out.println(message);
}
}
- 常用工具类有两个:
BeanUtils、ConvertUtils。BeanUtils用于封装数据,ConvertUtils用于处理类型转换。
- 常用API如下:
方法 | 描述 | |
BeanUtils对象 | copyProperty(Object p,,Object d) | 对象中的属性值对拷,p是等待被赋值的对象,d是源对象,将d中属性值赋值的p中对应的字段,d中有的属性p中必须有,p可以有更多属性. |
populate(Object bean, Map<String,String[]>properties) | 将Map数据封装到指定Javabean中,一般用于将表单的所有数据封装到javabean | |
setProperty(Object obj,String name,Object value) | 设置属性值 | |
getProperty(Object obj,String name) | 获得属性值 | |
copyProperty(Object obj,String name,Object value) | 设置属性值 |
- 自定义转换器
package com.yuyin.beanUtils;
import java.sql.Date;
import org.apache.commons.beanutils.Converter;
public class SqlDateConverter implements Converter {
@Override
public <T> T convert(Class<T> type, Object value) {
//type要转换成的数据类型,value要转换的值
if (value == null || type == null) {
return null;
}
if (type != java.sql.Date.class) {
return null;
}
if (value instanceof java.lang.String) {
String str = (String) value;
if (str.trim().length() > 0) {
return (T) java.sql.Date.valueOf(str);
}
}
return null;
}
}