由于Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils
Beanutils工具包的常用类:
- BeanUtils
- PropertyUtils
- ConvertUtils.regsiter(Converter convert, Class clazz)
- 自定义转换器
首先我们定义bean类
public class Student {
private String name;
private int age;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后我是用 beanutils写的实现类
package cn.csdn.beanutils.Student;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;
public class StudentTest {
@Test
public void test() throws Exception {
// 定义class文件
String url = "cn.csdn.beanutils.Student.Student";
// 加载类文件
Class cls = Class.forName(url);
// 创建bean实例
Student bean = (Student) cls.newInstance();
// 解析类的属性
Field fd[] = cls.getDeclaredFields();
// 输出有什么属性
for (Field d : fd) {
System.out.println(d.getType() + " " + d.getName());
}
// 定义操作属性
String name = "birthday";
// 为属性赋值
Date da = new Date();
BeanUtils.setProperty(bean, name, da);
// System.out.println(bean.getAge());
// 取值
System.out.println(BeanUtils.getProperty(bean, name));
}
@Test
public void test2() throws Exception {
Student stu = new Student();
// 注册转换器
ConvertUtils.register(new DateLocaleConverter(), Date.class);
String name = "birthday";
BeanUtils.setProperty(stu, name, "1990-09-20");
System.out.println(stu.getBirthday());
}
@Test
public void test3() throws Exception {
Student stu = new Student();
// 自定义转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
Date dt = null;
try {
dt = sim.parse((String) value);
} catch (ParseException e) {
throw new ConversionException("日期格式不对...");
}
return dt;
}
}, Date.class);
String name = "birthday";
BeanUtils.setProperty(stu, name, "1990-09-20");
System.out.println(stu.getBirthday());
}
/**
* Converter接口 Android new Converter(){ //重写接口中的方法 }
*
* 相当于 public class MyConverter implements Converter{ //重写接口中的方法
*
* } 并且 创建了MyConveter的对象 new MyConverter();//匿名的对象
*
*
* */
}