BeanUtils被廣泛的使用與三大架構。
主要解決的問題是:把對象的屬性資料封裝到對象中。該工具提供字元式操作為對象屬性提供封裝。
BeanUtils底層使用反射機制實作資料通路及封裝
使用前的準備工作
将commons-beanutils-1.9.3中的commons-beanutils-1.9.3.jar
将commons-logging-1.2中的commons-logging-1.2.jar
導入項目中
commons-beanutils依賴包下載下傳
主要方法
static void copyProperty(Object bean, String name, Object value)
Copy the specified property value to the specified destination bean, performing any type conversion that is required.
方法參數 | 使用 |
---|---|
static void copyProperty (Object bean, String name, Object value) | 将指定的屬性值複制到指定的目标bean,執行所需的任何類型轉換。 |
static void setProperty (Object bean, String name, Object value) | 和上一個方法使用 |
static void populate (Object bean, Map < String,? extends Object> properties) | 将指定的map集合内的元素指派到目标bean |
static void copyProperties (Object dest, Object orig) | 在屬性名相同的所有情況下,将屬性值從原始bean複制到目标bean。(底層進行深克隆) |
對深克隆淺克隆不了解詳情見 –> 深克隆和淺克隆詳細講解
javabean對象
package com.xiaoqiang;
import java.util.Date;
public class Student {
private String name;
private String sex;
private int age;
private Date birthday;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(String name, String sex, int age, Date birthday) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", birthday=" + birthday + "]";
}
}
BeanUtils元件使用
package com.xiaoqiang;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class TestBean {
public static void main(String[] args) throws Exception {
Student student = (Student) Class.forName("com.xiaoqiang.Student").newInstance();
BeanUtils.copyProperty(student, "name", "小強");
BeanUtils.copyProperty(student, "sex", "男");
BeanUtils.copyProperty(student, "age", "18");
BeanUtils.copyProperty(student, "age", );
//後寫的相當于重新指派
//BeanUtils.copyProperty(student, "aa", "a");
//錄入屬性不存在會産生 java.lang.NoClassDefFoundError
//BeanUtils.copyProperty(student, "age", "11a");
//若錄入存在,資料類型無法轉換成功則為轉化為預設值
Student studentCopy = new Student();
BeanUtils.copyProperties(studentCopy, student);
//底層實作深克隆 若不了解
//詳情見本人另一片文章深克隆淺克隆解析
studentCopy.setName("老王");
System.out.println(student);
System.out.println(studentCopy);
//通過map集合向對象插入資料
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "老羅");
map.put("age", );
map.put("sex", "男");
Student s = (Student) Class.forName("com.xiaoqiang.Student").newInstance();
BeanUtils.populate(s, map);
System.out.println(s);
}
}
BeanUtils注冊日期轉化器
package com.xiaoqiang;
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 Registre {
public static void main(String[] args) throws Exception, InvocationTargetException {
Student student = (Student) Class.forName("com.xiaoqiang.Student").newInstance();
BeanUtils.copyProperty(student, "name", "小強");
BeanUtils.copyProperty(student, "sex", "男");
BeanUtils.copyProperty(student, "age", );
// //注冊日期轉換器
// ConvertUtils.register(new Converter() {
//
// @Override
// public <T> T convert(Class<T> type, Object value) {
// if(type != Date.class){
// return null;
// }
// if("".equals(value.toString().trim())){
// return null;
// }
// //value 為傳入帶轉換值傳回需要轉換的指定資料類型
// SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
//
// try {
// return (T) format.parse(value.toString());
// } catch (ParseException e) {
// e.printStackTrace();
// }
// return null;
// }
// }, Date.class);
//可以采用Lambda表達式簡化匿名内部類代碼
//使用系統提供的日期轉化器
ConvertUtils.register(new DateLocaleConverter(), Date.class);
BeanUtils.copyProperty(student, "birthday", "1997-06-13");
//自己寫的類型隻能使用自己建立的類型轉化器
System.out.println(student);
}
}