1.介紹
1.1、構(gòu)建力度
總體上我們期望大多數(shù)JavaBeans組件對(duì)于中等規(guī)模的控制是輕量級(jí)的陵珍,要讓簡(jiǎn)單的case容易,盡可能讓盡量多的行為是默認(rèn)合乎情理的违施。
1.2互纯、可移植性
JavaBeans架構(gòu)一個(gè)主要目標(biāo)是提供一個(gè)平臺(tái)級(jí)的中立組件架構(gòu)。當(dāng)一個(gè)bean嵌套在另一個(gè)bean時(shí)我們提供全函數(shù)式實(shí)現(xiàn)通用所有平臺(tái)磕蒲。當(dāng)頂層的rootBean被植入一些平臺(tái)規(guī)范容器(例如:Word or Visual Basic or ClarisWorks or Netscape Navigator)那么JavaBeans APIs 應(yīng)該被融入平臺(tái)本地組件架構(gòu)中留潦。
打比方,在微軟平臺(tái)里辣往,JavaBeans APIs將會(huì)被COM和ActiveX橋接進(jìn)來(lái)兔院。同樣的,它也會(huì)將bean當(dāng)成活對(duì)象一部分來(lái)對(duì)待站削。所以一個(gè)單個(gè)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)必須對(duì)當(dāng)前平臺(tái)設(shè)備支持還要做發(fā)現(xiàn)檢查荣刑。
1.4、簡(jiǎn)單
期望JavaBeans APIs相對(duì)簡(jiǎn)單伦乔。相對(duì)于構(gòu)建重量級(jí)組件厉亏,我們關(guān)注創(chuàng)建小的輕量級(jí)組件,容易實(shí)現(xiàn)和使用烈和“唬總的原則是我們不想發(fā)明龐大的java.beans.Everything類來(lái)讓人繼承。相反的我們期望JavaBeans運(yùn)行時(shí)普通對(duì)象提供默認(rèn)的行為招刹,但允許繼承java.beans.something規(guī)范的接口來(lái)重載一系列默認(rèn)的行為恬试。
我們的一個(gè)目標(biāo)是人們應(yīng)該能夠快速的掌握基本JavaBeans的概念,這樣他們可以花費(fèi)很少功夫就能開(kāi)始寫和使用簡(jiǎn)單的組件疯暑,然后慢慢改進(jìn)训柴,使用在復(fù)雜特性的API里。
2.基本原理
2.1妇拯、什么是Bean幻馁?
最初的定義洗鸵,然后提煉它:
JavaBean是一個(gè)可重用的軟件組件,可以被構(gòu)建工具可視化操作仗嗦。
一些JavaBeans可能是簡(jiǎn)單的GUI元素膘滨,像按鈕、滑動(dòng)條稀拐;一些JavaBeans可能是復(fù)雜的軟件組件火邓,像數(shù)據(jù)庫(kù)查看工具或數(shù)據(jù)流;一些Java Beans可能沒(méi)有GUI特征德撬,但也是由application builder組織在一起铲咨。
JavaBeans的統(tǒng)一特性如下:
2.1.1、 Beans和類庫(kù)
不是所有有用的模塊都要轉(zhuǎn)換成beans蜓洪。Beans適合軟件組件中可視化操作以及定制化后獲取一些效果纤勒。類庫(kù)適合提供函數(shù)化的方式,這對(duì)程序員很有用蝠咆,但對(duì)可視化操作不是很有利踊东。
例如,提供JDBC數(shù)據(jù)庫(kù)接入API使用類庫(kù)方式比用bean更有意義刚操,因?yàn)镴DBC本質(zhì)上是編程層面的API闸翅,而不是可視化層面的操作。然而在JDBC上層寫一個(gè)數(shù)據(jù)庫(kù)接入bean也是有意義的事情菊霜。因此坚冀,例如你可以在定制時(shí)寫一個(gè)“select” bean幫助用戶組裝select語(yǔ)句,當(dāng)應(yīng)用運(yùn)行時(shí)使用JDBC來(lái)運(yùn)行select語(yǔ)句然后顯示結(jié)果鉴逞。
2.2记某、屬性,事件和方法
Java Bean最重要的三個(gè)特征:一組暴露的屬性构捡、一組運(yùn)行其他組件調(diào)用的方法液南、一組可以觸發(fā)的事件。
2.3勾徽、設(shè)計(jì)時(shí)和運(yùn)行時(shí)
我們運(yùn)行運(yùn)行時(shí)的接口在設(shè)計(jì)時(shí)被不同的類支持滑凉。
2.4、安全問(wèn)題
JavaBeans適用于標(biāo)準(zhǔn)的Java安全模型喘帚。
總體上建議JavaBean開(kāi)發(fā)者設(shè)計(jì)他們的beans以運(yùn)行在不被信任的applets上畅姊。以下是主要建議bean APIS設(shè)計(jì)的方面:
內(nèi)省:確保他們可以訪問(wèn)高級(jí)別的內(nèi)省APIs和在設(shè)計(jì)環(huán)境中低級(jí)別反射APIs是無(wú)限制的吹由,但是訪問(wèn)運(yùn)行時(shí)環(huán)境是更多限制若未;
持久化:Beans應(yīng)該在設(shè)計(jì)和運(yùn)行環(huán)境期待被序列化和反序列化;
GUI合并:大意是不被信任的applets將不允許運(yùn)行任何種的GUI合并倾鲫。
2.5粗合、本地觸發(fā)
JavaBeans組件基本的運(yùn)行模型是它們運(yùn)行時(shí)和它們?nèi)萜髟谙嗤刂房臻g萍嬉。例如容器是Java應(yīng)用,那么包含的bean運(yùn)行在相同的Java虛擬機(jī)當(dāng)成容器舌劳。如果容器是非Java應(yīng)用帚湘,那么JavaBeans運(yùn)行Java虛擬機(jī)時(shí)直接關(guān)聯(lián)應(yīng)用玫荣。
2.6甚淡、JavaBean作為遠(yuǎn)端狀態(tài)的鏈接
JavaBean架構(gòu)被設(shè)計(jì)成在分布式www環(huán)境下也能運(yùn)行。設(shè)計(jì)分布式程序關(guān)鍵部分在于工程學(xué)上很好的劃分本地和遠(yuǎn)程進(jìn)程捅厂。單機(jī)上本地進(jìn)程對(duì)快速交互有利贯卦,而遠(yuǎn)程訪問(wèn)會(huì)有高延遲和面臨各式各樣的調(diào)用失敗。分布式系統(tǒng)設(shè)計(jì)者趨向于非常小心的設(shè)計(jì)遠(yuǎn)程接口焙贷,最小化遠(yuǎn)程交互數(shù)量撵割,使用各種緩存技術(shù),使用批處理減少遠(yuǎn)程傳輸辙芍。
相對(duì)于所有bean APIs通過(guò)網(wǎng)絡(luò)工作啡彬,我們最初設(shè)計(jì)的目標(biāo)bean APIs通過(guò)虛擬機(jī)工作,交互時(shí)開(kāi)銷要廉價(jià)很多故硅,我們提供了幾種可選的機(jī)制來(lái)允許beans開(kāi)發(fā)者連接網(wǎng)絡(luò)服務(wù)器庶灿。
三種主要的網(wǎng)絡(luò)調(diào)用機(jī)制可以讓JavaBeans開(kāi)發(fā)者在所有Java平臺(tái)有效使用:
2.7、不可見(jiàn)Beans
沒(méi)有GUI(圖形化用戶界面)的beans也可以方法調(diào)用吃衅、事件觸發(fā)往踢、保存持久化狀態(tài)等。它們僅僅是沒(méi)有屏幕展示它們自己徘层。所以如果一個(gè)bean運(yùn)行在服務(wù)器它可能是不可見(jiàn)的峻呕,但如果它運(yùn)行在用戶桌面它可能有GUI展示。
2.8趣效、多線程
多線程下bean的行為規(guī)范瘦癌。多線程下beans的行為正確是每一個(gè)JavaBeans開(kāi)發(fā)者的責(zé)任。簡(jiǎn)單的beans可以大體使用方法“synchronized”來(lái)確保跷敬。
2.9讯私、國(guó)際化
JDK1.1中各種國(guó)際化APIs都加入到核心Java API集中。使用適當(dāng)?shù)膕trings使用java.util.getDefault()干花,正確的本地化strings被公共APIs使用妄帘。
2.10、Bean的可選類型視圖
第一版的JavaBeans架構(gòu)池凄,每一個(gè)bean是一個(gè)單一的Java對(duì)象抡驼。然而后面版本的JavaBeans我們計(jì)劃支持一組協(xié)作關(guān)聯(lián)的對(duì)象實(shí)現(xiàn)。
絕不要將Java拋出成不同類型視圖的Java bean角色肿仑。
例如:一個(gè)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)用場(chǎng)景
本段主要目的是描述而不是規(guī)范使用
這里打算展示一些beans的使用,不是描述所有的可能馏锡。在不同的應(yīng)用構(gòu)建工具里提供各式各樣的構(gòu)建場(chǎng)景雷蹂。
以下兩個(gè)設(shè)計(jì)構(gòu)建小程序的場(chǎng)景,但是在創(chuàng)建Java應(yīng)用時(shí)步驟相同:
3.1杯道、使用應(yīng)用構(gòu)建器構(gòu)造小程序
這個(gè)場(chǎng)景中匪煌,用戶通過(guò)應(yīng)用構(gòu)建器創(chuàng)建程序。應(yīng)用構(gòu)建器生成不同的源碼党巾,提供用戶可以添加自己源碼的模板萎庭。
3.2、在寫的小程序里用beans
這個(gè)場(chǎng)景我們使用一些寫的Java beans組件齿拂,完全類似于通過(guò)AWT組件構(gòu)建一個(gè)Applet驳规,而且打算描述beans是如何在沒(méi)有特殊工具下使用的:
4.窗口環(huán)境問(wèn)題
一系列特性在JDK1.1中加入了AWT,這些特性在“JDK 1.1- AWT增強(qiáng)”網(wǎng)頁(yè)里有介紹署海。
4.1吗购、統(tǒng)一數(shù)據(jù)轉(zhuǎn)換機(jī)制
統(tǒng)一數(shù)據(jù)轉(zhuǎn)換機(jī)制提出包含在AWT在內(nèi),打算提供基本的機(jī)制來(lái)使得對(duì)象砸狞、applets或者更高層的應(yīng)用的數(shù)據(jù)交互結(jié)構(gòu)化
4.2捻勉、粘貼/選擇服務(wù)
b