Sun公司對(duì)JavaBean的定義為:可以重復(fù)利用的軟件組件,它在遵循JavaBean技術(shù)規(guī)范的基礎(chǔ)上提供特定的功能,這些功能模塊可以組成更大規(guī)模的應(yīng)用系統(tǒng)。
到底什么是JavaBean?
先看一段代碼:
/**
* @author yong
*
*/
public class Add {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c;
c = a + b;
System.out.println("a+b=" + c);
}
}
上面的代碼很簡(jiǎn)單,它的功能就是求出a,b的和并且輸出。
但是從軟件工程的角度來看,上面的代碼有一下幾點(diǎn)不足:
可定制性差,如果現(xiàn)在要求其他的兩個(gè)數(shù)相加那么就必須修改程序代碼重新給a,b賦值才能完成新的需求。
可維護(hù)性差,整段代碼相互緊扣,如果得不到用戶想要的結(jié)果那么就不得不從頭到尾進(jìn)行檢查。類似于上面的代碼還是很簡(jiǎn)單的,但是如果一個(gè)大型的系統(tǒng)寫成上面那樣,如果出了問題調(diào)試起來就非常費(fèi)勁了。
復(fù)用性差,如果系統(tǒng)的不止一個(gè)地方需要用到上面代碼的功能那么就不得不在整個(gè)代碼中寫兩邊幾乎完全一樣的代碼。
上面的這些問題隨著系統(tǒng)的增大而越發(fā)的明顯,從而上面的代碼的價(jià)值也會(huì)隨著系統(tǒng)的增大而變得越來越小。
于是JavaBean技術(shù)出現(xiàn)了,簡(jiǎn)單的說JavaBean就是普通的java類,和其他的普通類的區(qū)別就在于在遵循JavaBean規(guī)范的前提下對(duì)一些功能進(jìn)行封裝,并對(duì)外界提供可以調(diào)用的方法接口,從而可以提高代碼的復(fù)用性,而且如果程序出問題可以很容易的把錯(cuò)誤定位在某個(gè)模塊使程序的調(diào)試、開發(fā)的效率提高,同時(shí)也方便了合作開發(fā),你一個(gè)Bean我一個(gè)Bean各不干擾。
改造后的代碼:
/**
* @author yong
*
*/
public class AddBean {
private int a;
private int b;
//求a,b兩個(gè)數(shù)的和
public int add(int a,int b){
return a+b;
}
//打印a,b兩個(gè)數(shù)的和
public void print(){
System.out.println("a+b="+(a+b));
}
//獲取a的值
public int getA(){
return a;
}
//給a賦值
public void setA(int a){
this.a=a;
}
//獲取b的值
public int getB(){
return b;
}
//給b賦值
public void setB(int b){
this.b=b;
}
}
上面的這個(gè)類就是一個(gè)簡(jiǎn)單的JavaBean
如此看來JavaBean和vb6.0當(dāng)中我們把相似的代碼提出來構(gòu)成一個(gè)過程的思路異曲同工,甚至可以說JavaBean和微軟的com組件是一個(gè)作用的,都是封裝代碼然后供其他的代碼調(diào)用,從而方便開發(fā)。
調(diào)用代碼:
/**
* @author yong
*
*/
public class Test {
public static void main(String[] args){
//新建addbean對(duì)象
AddBean add=new AddBean();
//設(shè)置a,b的值
add.setA(10);
add.setB(20);
//調(diào)用AddBean的方法打印a,b的和
add.print();
}
}
JavaBean的種類
JavaBean大體可以分兩類:第一類是可視化的,第二類是非可視化的
可視化JavaBean就是就是帶有界面的java類,如按鈕,文本框等等類似于VB當(dāng)中的控件。只不過一般情況下在java中我們沒有像VB中那樣對(duì)控件進(jìn)行拖拖拽拽,但是有些IDE可以實(shí)現(xiàn)和VB類似的功能例如JBuilder或者eclipse里面的Swing/Matisse插件等。
非可視化的JavaBean就是沒有界面的的java類,例如上面的那段實(shí)現(xiàn)a,b求和并輸出的類就是一個(gè)非可視化的JavaBean。這些JavaBean把功能進(jìn)行封裝方便其他的類的調(diào)用所以在web開發(fā)當(dāng)中用到的JavaBean大多是非可視化的JavaBean。
JavaBean的編碼規(guī)則
JavaBean的編碼規(guī)范在sun公司的網(wǎng)站上可以下載到(官網(wǎng)下載的速度有限,現(xiàn)在已將文檔上傳到我的文檔中,需要的童鞋可以去下載),100多頁(yè)的英文PDF文檔相當(dāng)磨練人的耐心,在這里總結(jié)如下幾條。
1、每個(gè)屬性必須有對(duì)應(yīng)的屬性獲取和設(shè)置方法,即每個(gè)屬性必須要提供相對(duì)應(yīng)的個(gè)getter和setter方法。
2、如果一個(gè)屬性的類型為boolean類型,則屬性對(duì)應(yīng)的獲取和設(shè)置方法就有所不同,例如某個(gè)boolean類型的屬性名為isLuck那么相對(duì)應(yīng)的屬性獲取方法為isLuck()屬性設(shè)置方法為setLuck()。
3、所有屬性最好是私有變量,即各個(gè)類的屬性最好設(shè)置為private,對(duì)屬性的取值和賦值操作要通過對(duì)應(yīng)的取值賦值方法進(jìn)行
4、所有的方法要設(shè)置為共有方法,即所有方法要設(shè)這為public
以上總結(jié)的幾條就是編寫非可視化JavaBean需要遵循的編碼規(guī)范,只有這樣別的開發(fā)者才能方便的調(diào)用JavaBean中提供的功能方法。
為什么屬性都要設(shè)置成私有,方法都要設(shè)置成共有呢?
作者:beijiguangyong 發(fā)表于2012-2-24 23:11:27
原文鏈接