BeanUtils工具由Apache軟件基金組織編寫,提供給我們使用,主要解決的問題是:把對象的屬性數(shù)據(jù)封裝到對象中。
創(chuàng)新互聯(lián)專注骨干網(wǎng)絡(luò)服務(wù)器租用十多年,服務(wù)更有保障!服務(wù)器租用,成都多線服務(wù)器托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實(shí)現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。
在整個(gè)J2EE的編程過程中,我們經(jīng)常會(huì)從各種配置文件中讀取相應(yīng)的數(shù)據(jù),需要明白的一點(diǎn)是從配置文件中讀取到的數(shù)據(jù)都是String,但是很顯然我們的應(yīng)用程序中不僅僅有String一種數(shù)據(jù)類型,比如:基本數(shù)據(jù)類型(int、double、char、float等),還有自定義數(shù)據(jù)類型(引用數(shù)據(jù)類型),
那么我們必須面臨的一個(gè)問題就是講字符串類型轉(zhuǎn)換為各種具體的數(shù)據(jù)類型,該怎么辦呢?
有兩種方法供我們是使用:
對于上面提到的兩種方法,我們分析第一種存在的問題是太過于繁瑣,每次都要進(jìn)行大量的類型轉(zhuǎn)換,Apache軟件基金會(huì)給我們提供了第二種方法,使用其提供的BeanUtils工具,具體的說只需要知道其中的兩個(gè)方法就能實(shí)現(xiàn)類型的轉(zhuǎn)換,很簡單,降低了編程的難度。
很明顯,要想使用別人開發(fā)的工具必須將其jar包導(dǎo)入到程序中,但是BeanUtils包存對另外一個(gè)軟件包的依賴,下面將具體的顯示jar包的名字,其中的版本號不一定與我使用的相同。
commons-beanutils-1.9.2.jar
commons-logging.jar
請下載最新的版本,并把相應(yīng)的jar包導(dǎo)入到程序中,具體導(dǎo)入jar包的方法在這里就不做任何的介紹了,這屬于最基本的知識,只要你在從事Java EE的項(xiàng)目開發(fā),幾乎每天都會(huì)遇到各種不同的jar包的導(dǎo)入。
在開始編寫具體的代碼之前,請將source導(dǎo)入到程序中,否則將不能生成正確的重載函數(shù),只需要使用吧Attach Source,將jar包(使用外部文件的方式導(dǎo)入,不要使用外部文件夾的方式導(dǎo)入)導(dǎo)入即可。
Beanutils工具在使用時(shí)幾乎只用到以下幾個(gè)方法,其中一個(gè)方法通常情況下都是使用匿名內(nèi)部類。
自定義數(shù)據(jù)類型使用BeanUtils工具時(shí),本身必須具備getter和setter方法,因?yàn)锽eanUtils工具本身也是一種內(nèi)省的實(shí)現(xiàn)方法,所以也是借助于底層的getter和setter方法進(jìn)行轉(zhuǎn)換的。
想要封裝成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設(shè)置屬性值的時(shí)候,如果屬性是基本數(shù)據(jù)類型,那么BeanUtils會(huì)自動(dòng)幫我們進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,并且 * BeanUtils設(shè)置屬性的時(shí)候也是依賴于底層的getter和setter方法 * * 如果設(shè)置的屬性值是其他的引用數(shù)據(jù)類型,此時(shí)必須要注冊一個(gè)類型轉(zhuǎn)換器才能實(shí)現(xiàn)自動(dòng)的轉(zhuǎn)換 * */ 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 { //從文件中讀取到的數(shù)據(jù)都是字符串的數(shù)據(jù),或者是表單提交的數(shù)據(jù)獲取到的時(shí)候也是字符串?dāng)?shù)據(jù) //在J2EE的編程中,我們會(huì)通過配置文件或者直接從文件獲取數(shù)據(jù)的方式得到我們想要的數(shù)據(jù) //那么就存在一個(gè)問題,當(dāng)我們需要的是一個(gè)int時(shí),讀到的數(shù)據(jù)確是String,那么我們每次是不是都要先判斷實(shí)際 //需要的是什么數(shù)據(jù)類型,然后進(jìn)行一個(gè)強(qiáng)制的類型轉(zhuǎn)換呢?回答是不需要,我們借助Apache軟件基金會(huì)提供的BeanUtils工具 //根本不用管什么樣的數(shù)據(jù)類型,只需要使用BeanUtils的setProperties方法,該方法有三個(gè)參數(shù),對三個(gè)參數(shù)進(jìn)行設(shè)置便會(huì) //實(shí)現(xiàn)自動(dòng)的數(shù)據(jù)類型轉(zhuǎn)換 /*ConvertUtils.register(new Converter() { //自定義日期類型轉(zhuǎn)換器 @Override public Object convert(Class type, Object value) { //type:目前需要轉(zhuǎn)換的數(shù)據(jù)類型 value:目前參數(shù)的值 //目標(biāo):將字符串轉(zhuǎn)換為日期 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表示要轉(zhuǎn)換的成引用類型,Date類型不是基本數(shù)據(jù)類型,所以需要一個(gè)轉(zhuǎn)換器進(jìn)行相應(yīng)的轉(zhuǎn)換,同樣該功能屬于BeanUtils */ //使用日起轉(zhuǎn)換器工具類 ConvertUtils.register(new DateLocaleConverter(), Date.class); //不靈活,自己實(shí)現(xiàn)最好 String id ="110"; //我們用這個(gè)三個(gè)String類型的屬性代表從配置文件中讀取到的數(shù)據(jù),實(shí)際編程過程中這些數(shù)據(jù)直接從properties文件中讀取 String name = "朱君鵬"; String salary = "1000"; // String birthday = "2015年01月30日"; //如果要使用工具中提供的轉(zhuǎn)換器必須要符合一定的格式,像這種格式就不能實(shí)現(xiàn)轉(zhuǎn)換 String birthday = "2015-01-30"; //該格式可以實(shí)現(xiàn)使用工具提供的轉(zhuǎn)換器類將字符串正確的轉(zhuǎn)換, Emp p = new Emp(); //讀取到數(shù)據(jù)之后,對該對象的屬性進(jìn)行設(shè)置,使用BeanUtils工具可以避免強(qiáng)制類型的轉(zhuǎn)換,但是在Emp類中的每個(gè)屬性都要有g(shù)etter和setter方法 //因?yàn)锽eanUtils工具實(shí)際上是對內(nèi)省的封裝,使其更加的好用,所以其底層還是依賴getter和setter方法 BeanUtils.setProperty(p, "id", id); //其中p代表的是要設(shè)置的對象 BeanUtils.setProperty(p, "name", name); //中間一個(gè)參數(shù)代表的是要設(shè)置的屬性 BeanUtils.setProperty(p, "salary", salary); //第三個(gè)參數(shù)代表的是第二個(gè)屬性的值 BeanUtils.setProperty(p, "date", birthday); System.out.println(p); } }
更多關(guān)于Java類庫BeanUtils使用方法及實(shí)例請查看下面的相關(guān)鏈接
名稱欄目:Java工具類BeanUtils庫介紹及實(shí)例詳解
文章來源:http://aaarwkj.com/article16/gpidgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、域名注冊、云服務(wù)器、虛擬主機(jī)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)