BeanUtils工具由Apache軟件基金組織編寫,提供給我們使用,主要解決的問題是:把對象的屬性數據封裝到對象中。
在整個J2EE的編程過程中,我們經常會從各種配置文件中讀取相應的數據,需要明白的一點是從配置文件中讀取到的數據都是String,但是很顯然我們的應用程序中不僅僅有String一種數據類型,比如:基本數據類型(int、double、char、float等),還有自定義數據類型(引用數據類型),
那么我們必須面臨的一個問題就是講字符串類型轉換為各種具體的數據類型,該怎么辦呢?
有兩種方法供我們是使用:
對于上面提到的兩種方法,我們分析第一種存在的問題是太過于繁瑣,每次都要進行大量的類型轉換,Apache軟件基金會給我們提供了第二種方法,使用其提供的BeanUtils工具,具體的說只需要知道其中的兩個方法就能實現類型的轉換,很簡單,降低了編程的難度。
很明顯,要想使用別人開發的工具必須將其jar包導入到程序中,但是BeanUtils包存對另外一個軟件包的依賴,下面將具體的顯示jar包的名字,其中的版本號不一定與我使用的相同。
commons-beanutils-1.9.2.jar
commons-logging.jar
請下載最新的版本,并把相應的jar包導入到程序中,具體導入jar包的方法在這里就不做任何的介紹了,這屬于最基本的知識,只要你在從事Java EE的項目開發,幾乎每天都會遇到各種不同的jar包的導入。
在開始編寫具體的代碼之前,請將source導入到程序中,否則將不能生成正確的重載函數,只需要使用吧Attach Source,將jar包(使用外部文件的方式導入,不要使用外部文件夾的方式導入)導入即可。
Beanutils工具在使用時幾乎只用到以下幾個方法,其中一個方法通常情況下都是使用匿名內部類。
自定義數據類型使用BeanUtils工具時,本身必須具備getter和setter方法,因為BeanUtils工具本身也是一種內省的實現方法,所以也是借助于底層的getter和setter方法進行轉換的。
想要封裝成javabean的對象
package com.jpzhutech.beanutils;
import java.util.Date;
import javax.xml.crypto.Data;
public class Emp {
private int id ;
private String name;
public Emp(int id, String name, double salary, Date date) {
super();
this.id = id;
this.name = name;
this.salary = salary;
this.date = date;
}
private double salary;
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Emp() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "編號:"+this.id+" 姓名:"+this.name+" 工資:"+this.salary+" 生日:"+date;
}
}
/**
* BeanUtils工具的使用
* 功能:BeanUtils主要是用于將對象的屬性封裝到對象中
* BeanUtils的好處:
* BeanUtils設置屬性值的時候,如果屬性是基本數據類型,那么BeanUtils會自動幫我們進行數據類型的轉換,并且
* BeanUtils設置屬性的時候也是依賴于底層的getter和setter方法
*
* 如果設置的屬性值是其他的引用數據類型,此時必須要注冊一個類型轉換器才能實現自動的轉換
* */
package com.jpzhutech.beanutils;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.crypto.Data;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
public class TestBeanUtils {
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException {
//從文件中讀取到的數據都是字符串的數據,或者是表單提交的數據獲取到的時候也是字符串數據
//在J2EE的編程中,我們會通過配置文件或者直接從文件獲取數據的方式得到我們想要的數據
//那么就存在一個問題,當我們需要的是一個int時,讀到的數據確是String,那么我們每次是不是都要先判斷實際
//需要的是什么數據類型,然后進行一個強制的類型轉換呢?回答是不需要,我們借助Apache軟件基金會提供的BeanUtils工具
//根本不用管什么樣的數據類型,只需要使用BeanUtils的setProperties方法,該方法有三個參數,對三個參數進行設置便會
//實現自動的數據類型轉換
/*ConvertUtils.register(new Converter() {
//自定義日期類型轉換器
@Override
public Object convert(Class type, Object value) { //type:目前需要轉換的數據類型 value:目前參數的值
//目標:將字符串轉換為日期
if(type != Date.class) return null;
if (value == null || "".equals(value.toString().trim())) {
return null;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date date = null;
try {
date = dateFormat.parse((String)value);
} catch (ParseException e) {
throw new RuntimeException(e);
}
return date;
}
}, Date.class); //Date.class表示要轉換的成引用類型,Date類型不是基本數據類型,所以需要一個轉換器進行相應的轉換,同樣該功能屬于BeanUtils
*/
//使用日起轉換器工具類
ConvertUtils.register(new DateLocaleConverter(), Date.class); //不靈活,自己實現最好
String id ="110"; //我們用這個三個String類型的屬性代表從配置文件中讀取到的數據,實際編程過程中這些數據直接從properties文件中讀取
String name = "朱君鵬";
String salary = "1000";
// String birthday = "2015年01月30日"; //如果要使用工具中提供的轉換器必須要符合一定的格式,像這種格式就不能實現轉換
String birthday = "2015-01-30"; //該格式可以實現使用工具提供的轉換器類將字符串正確的轉換,
Emp p = new Emp(); //讀取到數據之后,對該對象的屬性進行設置,使用BeanUtils工具可以避免強制類型的轉換,但是在Emp類中的每個屬性都要有getter和setter方法
//因為BeanUtils工具實際上是對內省的封裝,使其更加的好用,所以其底層還是依賴getter和setter方法
BeanUtils.setProperty(p, "id", id); //其中p代表的是要設置的對象
BeanUtils.setProperty(p, "name", name); //中間一個參數代表的是要設置的屬性
BeanUtils.setProperty(p, "salary", salary); //第三個參數代表的是第二個屬性的值
BeanUtils.setProperty(p, "date", birthday);
System.out.println(p);
}
}
更多關于Java類庫BeanUtils使用方法及實例請查看下面的相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。