更新時(shí)間:2023-02-08 來(lái)源:黑馬程序員 瀏覽量:
在JSP網(wǎng)頁(yè)開(kāi)發(fā)的初期階段,并沒(méi)有框架與邏輯分層的概念,需要將Java代碼嵌入到網(wǎng)頁(yè)中處理JSP頁(yè)面中的一些業(yè)務(wù)邏輯,如字符串處理和數(shù)據(jù)庫(kù)操作等。這種開(kāi)發(fā)方式雖然簡(jiǎn)單,但是如果將大量的Java代碼嵌入到JSP頁(yè)面,必定會(huì)為后期的修改和維護(hù)帶來(lái)一定的困難。同時(shí),將Java代碼寫(xiě)入JSP頁(yè)面中起不到代碼重用的作用,也不能體現(xiàn)出面向?qū)ο蟮乃枷?。為了彌補(bǔ)這種開(kāi)發(fā)方式的缺點(diǎn),JavaBean應(yīng)運(yùn)而生。
JavaBean是Java開(kāi)發(fā)語(yǔ)言中一個(gè)可以重復(fù)使用的組件,它本質(zhì)上就是一個(gè)Java類。我們可以引用JavaBean組件封裝數(shù)據(jù)或者完成某些業(yè)務(wù)邏輯,如封裝表單數(shù)據(jù)、字符串處理和數(shù)據(jù)庫(kù)操作等。使用JavaBean后,人們通常會(huì)將HTML與Java代碼相分離,將Java代碼單獨(dú)封裝成一個(gè)處理某種業(yè)務(wù)邏輯的類中,然后在JSP頁(yè)面中調(diào)用此類,這樣就降低了HTML代碼與Java代碼之間的耦合度,簡(jiǎn)化了JSP頁(yè)面,提高了Java代碼的重用性和靈活性。這種與HTML代碼相分離后,使用Java代碼封裝的類就是JavaBean組件。
為了規(guī)范JavaBean的開(kāi)發(fā),Sun公司發(fā)布了JavaBean的編寫(xiě)規(guī)范,具體如下。
·JavaBean必須具有一個(gè)公共的、無(wú)參的構(gòu)造方法,這個(gè)方法可以是編譯器自動(dòng)產(chǎn)生的默認(rèn)構(gòu)造方法。
·JavaBean提供公共的getter和setter方法,以方便對(duì)屬性進(jìn)行讀/寫(xiě)操作。
為了讓讀者對(duì)JavaBean有一個(gè)直觀的認(rèn)識(shí),下面講解一個(gè)簡(jiǎn)單的封裝數(shù)據(jù)的JavaBean,如文件11-10所示。
文件11-10 Book.java
package com.itheima.javabean; public class Book { private double price; public double getPrice() { return price; } public void setPrice(double price) { this.price=price; } }
在文件11-10中,定義了一個(gè)Book類,該類就是一個(gè)JavaBean,它沒(méi)有定義構(gòu)造方法,Java編譯器在編譯的時(shí)候,會(huì)自動(dòng)為這個(gè)類提供一個(gè)默認(rèn)的構(gòu)造方法。Book類中定義了一個(gè)price屬性,并提供了公共的getPrice()和setPrice()方法供外界訪問(wèn)屬性。
在講解面向?qū)ο髸r(shí),經(jīng)常會(huì)使用類的屬性,類的屬性指類的成員變量。在JavaBean中同樣也有屬性,但是它和成員變量不是一個(gè)概念,它是以方法定義的形式出現(xiàn)的,這些方法必須遵循一定的命名規(guī)范,例如,如果在JavaBean中包含一個(gè)String類型的屬性name,那么在JavaBean中必須至少包含getName()和seName()方法中的一個(gè),這兩個(gè)方法的聲明如下所示:
public String getName() {...} public void setName(String name) {...}
在上述兩個(gè)方法聲明中,方法體內(nèi)的內(nèi)容用“...”表示省略。關(guān)于這兩個(gè)方法的相關(guān)講解具體如下。
·getName()方法:稱為getter方法或者屬性訪問(wèn)器,該方法必須以小寫(xiě)的get前綴開(kāi)始,后跟屬性名,屬性名的第一個(gè)字母必須大寫(xiě),例如,nickName屬性的getter方法為getNickName()。
·setName()方法:稱為setter方法或者屬性修改器,該方法必須以小寫(xiě)的set前綴開(kāi)始,后跟屬性名,屬性名的第一個(gè)字母必須大寫(xiě),例如,nickName屬性的setter方法為setNickName()。
如果一個(gè)屬性只有g(shù)etter方法,則該屬性為只讀屬性,如果一個(gè)屬性只有setter方法,則該屬性為只寫(xiě)屬性,如果一個(gè)屬性既有g(shù)etter方法,又有setter方法,則該屬性為讀/寫(xiě)屬性。通常來(lái)說(shuō),在開(kāi)發(fā)JavaBean的時(shí)候,其屬性都定義為讀/寫(xiě)屬性。
需要注意的是,對(duì)于JavaBean屬性的命名方式有一個(gè)特殊情況,如果屬性的類型為boolean,它的命名方式應(yīng)該使用is/set而不是get/set。例如,有一個(gè)boolean類型的屬性married,則該屬性所對(duì)應(yīng)的方法聲明如下所示:
public boolean isMarried() {...} public void setMarried(boolean married) {...}
從上面的代碼中可以看出,married屬性的setter方法命名方式?jīng)]有變化,而getter方法變成了isMarried()方法,當(dāng)然,寫(xiě)成getMarried()也是可以的,只不過(guò)isMarried()更符合命名規(guī)范。