程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> JavaBeans 程序開發從入門到精通教程3

JavaBeans 程序開發從入門到精通教程3

編輯:J2EE

JavaBeans用戶化

JavaBeans開發者可以給一個Beans添加用戶化器(Customizer)、屬性編輯器(PropertyEditor)和BeansInfo接口來描述一個Beans的內容,Beans的使用者可在構造環境中通過與Beans附帶在一起的這些信息來用戶化Beans的外觀和應做的動作。一個Beans不必都有BeansCustomizer、PrpertyEditor和BeansInfo,根據實際情況,這些是可選的,當有些Beans較復雜時,就要提供這些信息,以Wizard的方式使Beans的使用者能夠用戶化一個Beans。有些簡單的Beans可能這些信息都沒有,則構造工具可使用自帶的透視裝置,透視出Beans的內容,並把信息顯示到標准的屬性表或事件表中供使用者用戶化Beans,前幾節提到的Beans的屬性、方法和事件名要以一定的格式命名,主要的作用就是供開發工具對Beans進行透視。當然也是給程序員在手寫程序中使用Beans提供方便,使他能觀其名、知其意。

用戶化器接口(Customizer Interface)

當一個Beans有了自己的用戶化器時,在構造工具內就可展現出自己的屬性表。在定義用戶化器時必須要實現Java.Beanss.Customizer接口。例如,下面是一個"按鈕"Beans的用戶化一器:

public class OurButtonCustomizer
extends Panel implements Customizer {
... ...

/*當實現象OurButtonCustomizer這樣的常規屬性表時,

一定要在其中實現addProperChangeListener

和removePropertyChangeListener,這樣,

構造工具可用這些功能代碼為屬性事件添加監聽者。*/

... ...
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
... ...

屬性編輯器接口(PropertyEditor Interface)

一個JavaBeans可提供PropertyEditor類,為指定的屬性創建一個編輯器。這個類必須繼承自Java.Beanss.PropertyEditorSupport類。構造工具與手寫代碼的程序員不直接使用這個類,而是在下一小節的BeansInfo中實例化並調用這個類。例:

public class MoleculeNameEditor extends Java.Beanss.PropertyEditorSupport {
public String[] getTags() {
String resule[]={
"HyaluronicAcid","Benzene","buckmisterfullerine",
"cyclohexane","ethane","water"};
return resule;}
}

上例中是為Tags屬性創建了屬性編輯器,在構造工具內,可從下拉表格中選擇MoleculeName的屬性應是"HyaluronicAid"或是"water"。

BeansInfo接口

每個Beans類也可能有與之相關的BeansInfo類,在其中描述了這個Beans在構造工具內出現時的外觀。BeansInfo中可定義屬性、方法、事件,顯示它們的名稱,提供簡單的幫助說明。 例如:

public class MoleculeBeansInfo extends SimpleBeansInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
PropertyDescriptor pd=new PropertyDescriptor("moleculeName",Molecule.class);

/*通過pd引用了上一節的MoleculeNameEditor類,取得並返回moleculeName屬性*/

pd.setPropertyEditorClass(MoleculeNameEditor.class);
PropertyDescriptor result[]={pd};
return result;
} catch(Exception ex) {
System.err.println("MoleculeBeansInfo: unexpected exeption: "+ex);
return null;
}
}
}

JavaBeans持久化

當一個JavaBeans在構造工具內被用戶化,並與其它Beans建立連接之後,它的所有狀態都應當可被保存,下一次被load進構造工具內或在運行時,就應當是上一次修改完的信息。為了能做到這一點,要把Beans的某些字段的信息保存下來,在定義Beans時要使它實現Java.io.Serializable接口。例如:

public class Button
implements Java.io.Serializable {
}

實現了序列化接口的Beans中字段的信息將被自動保存。若不想保存某些字段的信息則可在這些字段前冠以transient或static關鍵字,transient和static變量的信息是不可被保存的。通常,一個Beans所有公開出來的屬性都應當是被保存的,也可有選擇地保存內部狀態。 Beans開發者在修改軟件時,可以添加字段,移走對其它類的引用,改變一個字段的private/protected/public狀態,這些都不影響類的存儲結構關系。然而,當從類中刪除一個字段,改變一個變量在類體系中的位置,把某個字段改成transient/static,或原來是transIEnt/static,現改為別的特性時,都將引起存儲關系的變化。

JavaBeans的存儲格式

JavaBeans組件被設計出來後,一般是以擴展名為jar的Zip格式文件存儲,在jar中包含與JavaBeans有關的信息,並以MANIFEST文件指定其中的哪些類是JavaBeans。以jar文件存儲的JavaBeans在網絡中傳送時極大地減少了數據的傳輸數量,並把JavaBeans運行時所需要的一些資源捆綁在一起,本章主要論述了JavaBeans的一些內部特性及其常規設計方法,參考的是JavaBeans規范1.0A版本。隨著世界各大ISV對JavaBeans越來越多的支持,規范在一些細節上還在不斷演化,但基本框架不會再有大的變動。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved