top
Loading...
JSP與JavaBean
綜述:JavaBean體系結構是第一個全面的基于組件的標準模型之一,為Java類提供了定義方法、事件、屬性的方法,以便在設計時允許外部的操作和定制。JavaBean組件是Java類,這些類遵循一個統一的接口格式,以便該類的方法命名,底層行為以及具體實現能夠符合標準的JavaBean組件構造方式。這些組件的容器能以標準方式與JavaBean進行交互,使得JavaBean可以部署在多種設計工具和運行環境中。

如何定制JavaBean屬性?

一個標準的JavaBean組件應該滿足以下幾點特性:

(1)持續性
持續性允許一個構件保存它的狀態,因此它還能被重新創建。利用持續性機制,表單構件可存為一個文件,并在其它時間被打開,使以前的數據、公式和設置完好無損。JavaBeans持續性使用Java1.1環境對象序列化機制產生I/O流并在以后恢復。構件創建者只需實現可序列化的接口以使構件保持持續。持續的流可能為一個Java文件、一網絡連接或更有趣一些,一個由其它構件模型提供的流。若JavaBean構件嵌入一個ActiveX或OpenDoc構件中,Bean通過相關的"橋"提供持續的流。
(2)制定性
制定是JavaBean構件的新特性之一。簡而言之,Bean的創建者不僅創建運行狀態的構件,而且還通過擴展Java.awt.Component類創建了UI工具箱的類。這個UI工具箱可被用來制定Bean的一個實例。利用其它的構件模型,開發環境、可視化開發工具或任何其它的都必須提供所有對該構件的制定邏輯。JavaBean構件可隨同自己的UI工具箱類發布,智能的制定該構件。開發環境可制定任何在別人創建的構件。開發工具只是尋找相關的制定器類并在其窗口中創建一個它的實例,而不必需要其它的。
(3)自查性
對于能在開發環境中復用的Java構件,需要有查詢一個Bean能做些什么和產生和監聽事件的類型。在JavaBeans規范中,這被稱為規范并且是Java1.1提供的基本的反映機制的擴展。反映機制允許運行狀態進行查詢以得到對象的類并由此得到其公開的方法和變量。Bean的自查機制進行了擴展,查找指定的設計方式的使用。通過BeanInfo類,Bean作者可以暴露要暴露的公共方法和變量。當作為構件復用現存Java代碼時,BeanInfo類也是很有用的。編程人員可用創建一個BeanInfo類,具體指定要用到的得到和設置屬性的方法名,由此覆蓋缺省的自查。
(4)封裝性
JavaBean構件常被打包為JAR文件。JAR的格式允許構件作為一個單獨的實體,隨同其支持類(如制定編輯器、BeanInfo和其它資源文件)被打包。開發環境必須了解JAR的格式并使用其manifest文件一個JAR中所包括的Bean。包含一個JavaBean構件的JAR還可能包括該構件的序列化版本。若這個持續的實例存在,便使用它。這樣,提供商就可以發布該構件的可用的或制定好的版本。
JavaBean的屬性與一般Java程序中所指的屬性,或者說與所有面向對象的程序設計語言中對象的屬性是一個概念,在程序中的具體體現就是類中的變量。在JavaBean設計中,按照屬性的不同作用又細分為四類:Simple,Index,Bound與Constrained屬性。

1. Simple屬性
一個簡單屬性表示一個伴隨有一對get/set方法(C語言的過程或函數在Java程序中稱為"方法")的變量。屬性名與和該屬性相關的get/set方法名對應。例如:如果有setX和getX方法,則暗指有一個名為"X"的屬性。如果有一個方法名為isX,則通常暗指"X"是一個布爾屬性(即X的值為true或false)。例如在下面這個程序中:

public class alden1 extends Canvas {
string ourString= "Hello"; //屬性名為ourString,類型為字符串
public alden1(){// alden1的構造函數,與C++中構構造函數的義相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"屬性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"屬性 */
public String getString() {
return ourString;
}
}

2. Indexed屬性
一個Indexed屬性表示一個數組值。使用與該屬性對應的set/get方法可取得數組中的數值。該屬性也可一次設置或取得整個數組的值。例:

public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6}; // dataSet是一個indexed屬性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/*

設置整個數組

*/
public void setDataSet(int[] x){
dataSet=x;
}
/*

設置數組中的單個元素值

*/
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/*

取得整個數組值

*/
public int[] getDataSet(){
return dataSet;
}
/*

取得數組中的指定元素值

*/
public int getDataSet(int x){
return dataSet[x];
}
}
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗