1.介紹
1.1、構建力度
總體上我們期望大多數JavaBeans組件對于中等規模的控制是輕量級的,要讓簡單的case容易,盡可能讓盡量多的行為是默認合乎情理的。
1.2、可移植性
JavaBeans架構一個主要目標是提供一個平臺級的中立組件架構。當一個bean嵌套在另一個bean時我們提供全函數式實現通用所有平臺。當頂層的rootBean被植入一些平臺規范容器(例如:Word or Visual Basic or ClarisWorks or Netscape Navigator)那么JavaBeans APIs 應該被融入平臺本地組件架構中。
打比方,在微軟平臺里,JavaBeans APIs將會被COM和ActiveX橋接進來。同樣的,它也會將bean當成活對象一部分來對待。所以一個單個Bean應該有能力運行在很多不同的環境。在不同的目標環境,它應該有能力發送事件,服務方法調用等,就像任意其他組件一樣。我們精心的確保各種各樣的Beans APIs可以被干凈的轉換成三大主要的組件模型(notably OpenDoc, OLE/COM/ActiveX, and LiveConnect)。
1.3、統一的高質量API
寫JavaBeans組件的人可以規劃好一組APIs的一致性,讓它們可以在任何地方工作。我們不希望Bean的實現必須對當前平臺設備支持還要做發現檢查。
1.4、簡單
期望JavaBeans APIs相對簡單。相對于構建重量級組件,我們關注創建小的輕量級組件,容易實現和使用。總的原則是我們不想發明龐大的java.beans.Everything類來讓人繼承。相反的我們期望JavaBeans運行時普通對象提供默認的行為,但允許繼承java.beans.something規范的接口來重載一系列默認的行為。
我們的一個目標是人們應該能夠快速的掌握基本JavaBeans的概念,這樣他們可以花費很少功夫就能開始寫和使用簡單的組件,然后慢慢改進,使用在復雜特性的API里。
2.基本原理
2.1、什么是Bean?
最初的定義,然后提煉它:
JavaBean是一個可重用的軟件組件,可以被構建工具可視化操作。
一些JavaBeans可能是簡單的GUI元素,像按鈕、滑動條;一些JavaBeans可能是復雜的軟件組件,像數據庫查看工具或數據流;一些Java Beans可能沒有GUI特征,但也是由application builder組織在一起。
JavaBeans的統一特性如下:
2.1.1、 Beans和類庫
不是所有有用的模塊都要轉換成beans。Beans適合軟件組件中可視化操作以及定制化后獲取一些效果。類庫適合提供函數化的方式,這對程序員很有用,但對可視化操作不是很有利。
例如,提供JDBC數據庫接入API使用類庫方式比用bean更有意義,因為JDBC本質上是編程層面的API,而不是可視化層面的操作。然而在JDBC上層寫一個數據庫接入bean也是有意義的事情。因此,例如你可以在定制時寫一個“select” bean幫助用戶組裝select語句,當應用運行時使用JDBC來運行select語句然后顯示結果。
2.2、屬性,事件和方法
Java Bean最重要的三個特征:一組暴露的屬性、一組運行其他組件調用的方法、一組可以觸發的事件。
2.3、設計時和運行時
我們運行運行時的接口在設計時被不同的類支持。
2.4、安全問題
JavaBeans適用于標準的Java安全模型。
總體上建議JavaBean開發者設計他們的beans以運行在不被信任的applets上。以下是主要建議bean APIS設計的方面:
內省:確保他們可以訪問高級別的內省APIs和在設計環境中低級別反射APIs是無限制的,但是訪問運行時環境是更多限制;
持久化:Beans應該在設計和運行環境期待被序列化和反序列化;
GUI合并:大意是不被信任的applets將不允許運行任何種的GUI合并。
2.5、本地觸發
JavaBeans組件基本的運行模型是它們運行時和它們容器在相同地址空間。例如容器是Java應用,那么包含的bean運行在相同的Java虛擬機當成容器。如果容器是非Java應用,那么JavaBeans運行Java虛擬機時直接關聯應用。
2.6、JavaBean作為遠端狀態的鏈接
JavaBean架構被設計成在分布式www環境下也能運行。設計分布式程序關鍵部分在于工程學上很好的劃分本地和遠程進程。單機上本地進程對快速交互有利,而遠程訪問會有高延遲和面臨各式各樣的調用失敗。分布式系統設計者趨向于非常小心的設計遠程接口,最小化遠程交互數量,使用各種緩存技術,使用批處理減少遠程傳輸。
相對于所有bean APIs通過網絡工作,我們最初設計的目標bean APIs通過虛擬機工作,交互時開銷要廉價很多,我們提供了幾種可選的機制來允許beans開發者連接網絡服務器。
三種主要的網絡調用機制可以讓JavaBeans開發者在所有Java平臺有效使用:
2.7、不可見Beans
沒有GUI(圖形化用戶界面)的beans也可以方法調用、事件觸發、保存持久化狀態等。它們僅僅是沒有屏幕展示它們自己。所以如果一個bean運行在服務器它可能是不可見的,但如果它運行在用戶桌面它可能有GUI展示。
2.8、多線程
多線程下bean的行為規范。多線程下beans的行為正確是每一個JavaBeans開發者的責任。簡單的beans可以大體使用方法“synchronized”來確保。
2.9、國際化
JDK1.1中各種國際化APIs都加入到核心Java API集中。使用適當的strings使用java.util.getDefault(),正確的本地化strings被公共APIs使用。
2.10、Bean的可選類型視圖
第一版的JavaBeans架構,每一個bean是一個單一的Java對象。然而后面版本的JavaBeans我們計劃支持一組協作關聯的對象實現。
絕不要將Java拋出成不同類型視圖的Java bean角色。
例如:一個bean x是X類型,你想要轉成java.awt.Component類型,應該這樣:
java.awt.Component c = (java.awt.Component) Beans.getInstanceOf(x,?java.awt.Component.class);
3.應用場景
本段主要目的是描述而不是規范使用
這里打算展示一些beans的使用,不是描述所有的可能。在不同的應用構建工具里提供各式各樣的構建場景。
以下兩個設計構建小程序的場景,但是在創建Java應用時步驟相同:
3.1、使用應用構建器構造小程序
這個場景中,用戶通過應用構建器創建程序。應用構建器生成不同的源碼,提供用戶可以添加自己源碼的模板。
3.2、在寫的小程序里用beans
這個場景我們使用一些寫的Java beans組件,完全類似于通過AWT組件構建一個Applet,而且打算描述beans是如何在沒有特殊工具下使用的:
4.窗口環境問題
一系列特性在JDK1.1中加入了AWT,這些特性在“JDK 1.1- AWT增強”網頁里有介紹。
4.1、統一數據轉換機制
統一數據轉換機制提出包含在AWT在內,打算提供基本的機制來使得對象、applets或者更高層的應用的數據交互結構化
4.2、粘貼/選擇服務
b