天天看點

BeanUtils使用及其方法分析BeanUtils被廣泛的使用與三大架構。

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);
    }
}
           

Lambda表達式詳解