1.介紹
1.1、構(gòu)建力度
總體上我們期望大多數(shù)JavaBeans組件對于中等規(guī)模的控制是輕量級的,要讓簡單的case容易,盡可能讓盡量多的行為是默認(rèn)合乎情理的。
1.2、可移植性
JavaBeans架構(gòu)一個主要目標(biāo)是提供一個平臺級的中立組件架構(gòu)。當(dāng)一個bean嵌套在另一個bean時我們提供全函數(shù)式實(shí)現(xiàn)通用所有平臺。當(dāng)頂層的rootBean被植入一些平臺規(guī)范容器(例如:Word or Visual Basic or ClarisWorks or Netscape Navigator)那么JavaBeans APIs 應(yīng)該被融入平臺本地組件架構(gòu)中。
打比方,在微軟平臺里,JavaBeans APIs將會被COM和ActiveX橋接進(jìn)來。同樣的,它也會將bean當(dāng)成活對象一部分來對待。所以一個單個Bean應(yīng)該有能力運(yùn)行在很多不同的環(huán)境。在不同的目標(biāo)環(huán)境,它應(yīng)該有能力發(fā)送事件,服務(wù)方法調(diào)用等,就像任意其他組件一樣。我們精心的確保各種各樣的Beans APIs可以被干凈的轉(zhuǎn)換成三大主要的組件模型(notably OpenDoc, OLE/COM/ActiveX, and LiveConnect)。
1.3、統(tǒng)一的高質(zhì)量API
寫JavaBeans組件的人可以規(guī)劃好一組APIs的一致性,讓它們可以在任何地方工作。我們不希望Bean的實(shí)現(xiàn)必須對當(dāng)前平臺設(shè)備支持還要做發(fā)現(xiàn)檢查。
1.4、簡單
期望JavaBeans APIs相對簡單。相對于構(gòu)建重量級組件,我們關(guān)注創(chuàng)建小的輕量級組件,容易實(shí)現(xiàn)和使用??偟脑瓌t是我們不想發(fā)明龐大的java.beans.Everything類來讓人繼承。相反的我們期望JavaBeans運(yùn)行時普通對象提供默認(rèn)的行為,但允許繼承java.beans.something規(guī)范的接口來重載一系列默認(rèn)的行為。
我們的一個目標(biāo)是人們應(yīng)該能夠快速的掌握基本JavaBeans的概念,這樣他們可以花費(fèi)很少功夫就能開始寫和使用簡單的組件,然后慢慢改進(jìn),使用在復(fù)雜特性的API里。
2.基本原理
2.1、什么是Bean?
最初的定義,然后提煉它:
JavaBean是一個可重用的軟件組件,可以被構(gòu)建工具可視化操作。

一些JavaBeans可能是簡單的GUI元素,像按鈕、滑動條;一些JavaBeans可能是復(fù)雜的軟件組件,像數(shù)據(jù)庫查看工具或數(shù)據(jù)流;一些Java Beans可能沒有GUI特征,但也是由application builder組織在一起。
JavaBeans的統(tǒng)一特性如下:

2.1.1、 Beans和類庫
不是所有有用的模塊都要轉(zhuǎn)換成beans。Beans適合軟件組件中可視化操作以及定制化后獲取一些效果。類庫適合提供函數(shù)化的方式,這對程序員很有用,但對可視化操作不是很有利。
例如,提供JDBC數(shù)據(jù)庫接入API使用類庫方式比用bean更有意義,因?yàn)镴DBC本質(zhì)上是編程層面的API,而不是可視化層面的操作。然而在JDBC上層寫一個數(shù)據(jù)庫接入bean也是有意義的事情。因此,例如你可以在定制時寫一個“select” bean幫助用戶組裝select語句,當(dāng)應(yīng)用運(yùn)行時使用JDBC來運(yùn)行select語句然后顯示結(jié)果。
2.2、屬性,事件和方法
Java Bean最重要的三個特征:一組暴露的屬性、一組運(yùn)行其他組件調(diào)用的方法、一組可以觸發(fā)的事件。
2.3、設(shè)計時和運(yùn)行時
我們運(yùn)行運(yùn)行時的接口在設(shè)計時被不同的類支持。
2.4、安全問題
JavaBeans適用于標(biāo)準(zhǔn)的Java安全模型。
總體上建議JavaBean開發(fā)者設(shè)計他們的beans以運(yùn)行在不被信任的applets上。以下是主要建議bean APIS設(shè)計的方面:
內(nèi)?。捍_保他們可以訪問高級別的內(nèi)省APIs和在設(shè)計環(huán)境中低級別反射APIs是無限制的,但是訪問運(yùn)行時環(huán)境是更多限制;
持久化:Beans應(yīng)該在設(shè)計和運(yùn)行環(huán)境期待被序列化和反序列化;
GUI合并:大意是不被信任的applets將不允許運(yùn)行任何種的GUI合并。
2.5、本地觸發(fā)
JavaBeans組件基本的運(yùn)行模型是它們運(yùn)行時和它們?nèi)萜髟谙嗤刂房臻g。例如容器是Java應(yīng)用,那么包含的bean運(yùn)行在相同的Java虛擬機(jī)當(dāng)成容器。如果容器是非Java應(yīng)用,那么JavaBeans運(yùn)行Java虛擬機(jī)時直接關(guān)聯(lián)應(yīng)用。

2.6、JavaBean作為遠(yuǎn)端狀態(tài)的鏈接
JavaBean架構(gòu)被設(shè)計成在分布式www環(huán)境下也能運(yùn)行。設(shè)計分布式程序關(guān)鍵部分在于工程學(xué)上很好的劃分本地和遠(yuǎn)程進(jìn)程。單機(jī)上本地進(jìn)程對快速交互有利,而遠(yuǎn)程訪問會有高延遲和面臨各式各樣的調(diào)用失敗。分布式系統(tǒng)設(shè)計者趨向于非常小心的設(shè)計遠(yuǎn)程接口,最小化遠(yuǎn)程交互數(shù)量,使用各種緩存技術(shù),使用批處理減少遠(yuǎn)程傳輸。
相對于所有bean APIs通過網(wǎng)絡(luò)工作,我們最初設(shè)計的目標(biāo)bean APIs通過虛擬機(jī)工作,交互時開銷要廉價很多,我們提供了幾種可選的機(jī)制來允許beans開發(fā)者連接網(wǎng)絡(luò)服務(wù)器。
三種主要的網(wǎng)絡(luò)調(diào)用機(jī)制可以讓JavaBeans開發(fā)者在所有Java平臺有效使用:

2.7、不可見Beans
沒有GUI(圖形化用戶界面)的beans也可以方法調(diào)用、事件觸發(fā)、保存持久化狀態(tài)等。它們僅僅是沒有屏幕展示它們自己。所以如果一個bean運(yùn)行在服務(wù)器它可能是不可見的,但如果它運(yùn)行在用戶桌面它可能有GUI展示。
2.8、多線程
多線程下bean的行為規(guī)范。多線程下beans的行為正確是每一個JavaBeans開發(fā)者的責(zé)任。簡單的beans可以大體使用方法“synchronized”來確保。
2.9、國際化
JDK1.1中各種國際化APIs都加入到核心Java API集中。使用適當(dāng)?shù)膕trings使用java.util.getDefault(),正確的本地化strings被公共APIs使用。
2.10、Bean的可選類型視圖
第一版的JavaBeans架構(gòu),每一個bean是一個單一的Java對象。然而后面版本的JavaBeans我們計劃支持一組協(xié)作關(guān)聯(lián)的對象實(shí)現(xiàn)。
絕不要將Java拋出成不同類型視圖的Java bean角色。
例如:一個bean x是X類型,你想要轉(zhuǎn)成java.awt.Component類型,應(yīng)該這樣:
java.awt.Component c = (java.awt.Component) Beans.getInstanceOf(x,?java.awt.Component.class);
3.應(yīng)用場景
本段主要目的是描述而不是規(guī)范使用
這里打算展示一些beans的使用,不是描述所有的可能。在不同的應(yīng)用構(gòu)建工具里提供各式各樣的構(gòu)建場景。
以下兩個設(shè)計構(gòu)建小程序的場景,但是在創(chuàng)建Java應(yīng)用時步驟相同:
3.1、使用應(yīng)用構(gòu)建器構(gòu)造小程序
這個場景中,用戶通過應(yīng)用構(gòu)建器創(chuàng)建程序。應(yīng)用構(gòu)建器生成不同的源碼,提供用戶可以添加自己源碼的模板。

3.2、在寫的小程序里用beans
這個場景我們使用一些寫的Java beans組件,完全類似于通過AWT組件構(gòu)建一個Applet,而且打算描述beans是如何在沒有特殊工具下使用的:

4.窗口環(huán)境問題
一系列特性在JDK1.1中加入了AWT,這些特性在“JDK 1.1- AWT增強(qiáng)”網(wǎng)頁里有介紹。
4.1、統(tǒng)一數(shù)據(jù)轉(zhuǎn)換機(jī)制
統(tǒng)一數(shù)據(jù)轉(zhuǎn)換機(jī)制提出包含在AWT在內(nèi),打算提供基本的機(jī)制來使得對象、applets或者更高層的應(yīng)用的數(shù)據(jù)交互結(jié)構(gòu)化
4.2、粘貼/選擇服務(wù)
b