BeanUtils框架
BeanUtils是阿帕奇(apache)开发的一套提供对JavaBean进行各种操作的框架,
BeanUtils分为4个包:
org.apache.commons.beanutils
org.apache.commons.beanutils.converters
org.apache.commons.beanutils.locale
org.apache.commons.beanutils.locale.converters
org.apache.commons.beanutils
此包主要用于提供操作javbean的工具类
BeanUtils JavaBean克隆及属性拷贝 主要jar:commons-beanutils-1.8.3.jar 支持jar:commons-logging-1.1.1.jar(日志记录器)
PropertyUtils JavaBean属性拷贝
ConvertUtils 类型转换
MethodUtils JavaBean方法调用
ConstructorUtils 构造Bean对象
BeanUtils和ProertyUtils的区别
BeanUtils在对Bean赋值时会进行类型转换。也即是说在copyProperty只要属性名相同,就算类型不同,BeanUtils也可以进行copy
PropertyBean则可能会报错
BeanUtils主要方法
BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
- Simple: 简单类型, 如String,Int...
- Indexed: 索引类型, 如数组、arrayList....
- Maped: 就是指Map,如HashMap....
|
BeanUtils更强大的功能是直接访问内嵌对象的属性
BeanUtils示例代码
public class Person {//javaBean
private String name;//字段
private String password;//字段
private int age;//字段
private Date birthday;//字段
public Date getBirthday() {
return birthday; }
public void setBirthday(Date birthday) {
this.birthday = birthday; }
public String getAb() {
return null; }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getPassword() {
return password; }
public void setPassword(String password) {
this.password = password; }
public int getAge() {
return age; }
public void setAge(int age) {
this.age = age; }
}
|
使用beanUtils操作bean的属性
public class Demo1 {
@Test
public void test1() throws Exception {
Person p = new Person();
BeanUtils.
setProperty(p, "name", "张三");
System.out.println(p.getName());
//输出 :张三
}
@Test
public void test2() throws Exception {
* 客户提交的数据--String类型
String name = "张三";
String password = "abcd123";
String age = "38";
String birthday = "1980-09-09";
Person p = new Person();
* 将客户提交的name这个对象的值封装到Bean对象p的"name"属性里,
* 这样就可以通过p的方法对用户的数据进行set和get操作
* "age"属性接收的是int类型的值,这里BeanUtils对客户提交的String类
* 型的age进行了数据类型转换操作,但此种转换操作只支持八种基本数据类型
BeanUtils.
setProperty(p, "name", name);
BeanUtils.
setProperty(p, "password", password);
BeanUtils.
setProperty(p, "age", age);
BeanUtils.
setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
* 因为BeanUtils只支持八种基本数据类型的转换,而birthday是data类型
* 所以下面操作将引发java.lang.IllegalArgumentException: 异常
System.out.println(p.getBirthday());
}
@Test
* 自己注册转换器
public void test3() throws Exception {
*
客户提交的数据--String类型
String name = "张三";
String password = "abcd123";
String age = "38";
String birthday = "1980-09-09";
* 虽然BeanUtils不支持除了八种基本数据类型之外的转换操作,
* 但是BeanUtils提供了转换器ConvertUtils,
* ConvertUtils这个工具类提供了register可以对转换器进行注册
ConvertUtils.
register(new Converter() {
public Object convert(Class type, Object value) {
* 判断数据是否为空
if (value == null) {
return null;
}
* 判断数据是否是String
if (!(value instanceof String)) {
throw new ConversionException("只支持String类型的转换");
}
String str = (String) value;
* 判断数据是否是空白字符串
if (str.trim().equals("")) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e);
// 异常链不能断
}
}
}, Date.class);
Person p = new Person();
BeanUtils.
setProperty(p, "name", name);
BeanUtils.
setProperty(p, "password", password);
BeanUtils.
setProperty(p, "age", age);
BeanUtils.
setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
@Test
* 利用BeanUtils自带的转换器
public void test4() throws Exception {
*
客户提交的数据--String类型
String name = "张三";
String password = "abcd123";
String age = "38";
String birthday = "1980-09-09";
* BeanUtils自带的转换器DateLocaleConverter
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p = new Person();
BeanUtils.
setProperty(p, "name", name);
BeanUtils.
setProperty(p, "password", password);
BeanUtils.
setProperty(p, "age", age);
BeanUtils.
setProperty(p, "birthday", birthday);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
@Test
public void test5() throws IllegalAccessException,InvocationTargetException {
Map map = new HashMap();
map.put("name", "张三");
map.put("password", "abc123");
map.put("age", "33");
map.put("birthday", "1980-09-09");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p = new Person();
* 将Map集合里的数据填充到Bean的p对象里,
* 也就是用Map集合中的值填充Bean属性,
* 进行填充时,Map集合中的键key必须与Bean的属性名相对应,
* 即如果Map集合里有"name"这个键,
* Bean中必须有对应的name属性。
BeanUtils.
populate(p, map);
System.out.println(p.getName());
System.out.println(p.getPassword());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}
}
|
PropertyUtils主要方法
这个类和BeanUtils类很多的方法在参数上都是相同的,但返回值不同。
BeanUtils着重于“Bean”,返回值通常是String,
PropertyUtils着重于属性,返回值通常是Object
|
MethodUtils主要方法
动态调用方法,得到方法,主要方法有
|
ConstructorUtils主要方法
这个类中的主要方法分为两种,一种是得到构造方法,一种是创建对象。
|
ConvertUtils
将字符串转换成指定类型
将任意的实例转换成String,用法非常简单相当于调用toString()方法
将字符串value转换成clazz的一个实例,如果失败,将以String的形式返回value
这个方法是对前一方法的加强版,将数组中的每个value都进行转换,最后以Object返回
|