複製鏈接
請複製以下鏈接發送給好友

Bean

(描述Java的軟件組件模型)

鎖定
EJB是Enterprise Java Bean的縮寫,一個Bean扮演着應用程序素材的角色。它包含有一個functional interface,一個life-cycle interface,以及一個實現它所支援的商業方法的類別。
外文名
Enterprise Java Bean
縮    寫
Bean
定    義
描述Java的軟件組件模型
類    型
應用程序素材的角色
目    的
將可以重複使用的軟件代碼打包
應用範圍
應用於服務器的部件

Bean定義

JavaBean是描述Java軟件組件模型,有點類似於Microsoft的COM組件概念。在Java模型中,通過JavaBean可以無限擴充Java程序的功能,通過JavaBean的組合可以快速的生成新的應用程序。對於程序員來説,最好的一點就是JavaBean可以實現代碼的重複利用,另外對於程序的易維護性等等也有很重大的意義。
比如説一個購物車程序,要實現購物車中添加一件商品這樣的功能,就可以寫一個購物車操作的JavaBean,建立一個public的AddItem成員方法,前台Jsp文件裏面直接調用這個方法來實現。如果後來又考慮添加商品的時候需要判斷庫存是否有貨物,沒有貨物不得購買,在這個時候我們就可以直接修改JavaBean的AddItem方法,加入處理語句來實現,這樣就完全不用修改前台jsp程序了。
一個簡單的JavaBean
FirstJavaBean.java
importjava.io.*;
public class FirstJavaBean {
private String FirstProperty = new String("");
public FirstJavaBean() {}
public String getFirstProperty() {
return FirstProperty;
}
public void setFirstProperty(String value) {
FirstProperty = value;
}
public static void main(String[] args)
{
System.out.println("My First JavaBean!");
}
}
如果運行這個程序,就會出現下面的結果:
My First JavaBean!
這是一個很典型的JavaBean的代表,簡單地解釋一下,FirstProperty是其中的一個屬性(Property),外部通過get/set方法可以對這個屬性進行操作,如果您寫過VB的class的話,對這個就再也熟悉不過了。Main方法是為了測試程序用的,寫JavaBean可以先不必加入到Jsp程序中調用,而直接用main方法來進行調試,調試好以後就可以在Jsp程序中調用了。

Bean應用領域

用户可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,並且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用户可以認為JavaBean提供了一種隨時隨地的複製和粘貼的功能,而不用關心任何改變。

Bean發展

最初,JavaBean的目的是為了將可以重複使用的軟件代碼打包標準。特別是用於幫助廠家開發在綜合開發環境IDE)下使用的java軟件部件。這些包括如Grid控件,用户可以將該部件拖放到開發環境中。從此,JavaBean就可以擴展為一個java web 應用的標準部件,並且JavaBean部件框架已經擴展為企業版的 Bean(EJB)。

Bean需求

JavaBean是java類,屬於某些特定的譯碼指導方針,並且擴展了適應性和範圍,允許用户訪問內部的屬性和方法。通過這些,JavaBean類可以用於下列方法:
1. 在IDE中,JavaBean的功能允許應用開發者瀏覽其中的方法,即使JavaBean是被編譯的,並且無法利用原始的源文件
2. 在 Remote Method Invocation(RMI) 的分佈式風格中,這項功能聽起來並不讓人興奮,但是在未來的包含企業版的JavaBean後,將改變這種情況。
3. 為了JavaBean的屬性值和狀態可以保存到磁盤上。

Bean注意事項

實際應用中,在表現對象或者處理前擴展JavaBean的設計非常有用。通常認為如果提供信息,web開發者將在功能上滿足用户對JavaBean的需求。例如: HTML中顯示敏感的數據時,用户可以屏蔽的條目,如密碼、電話號碼等。
良好規劃設計的JavaBean是值得信賴的。
Java 中的 null 不同於 SQL 中的 null
看這樣一道測試程序
public class NullTest
{
public static void main(String[] args)
{
int I = 0;
// int I = null; // not a valid initialization
String str = null;
String strZeroOutValue = “”;
StringBuffer sb = new StringBuffer(“Null test: String initialized as null = “);
sb.append(str);
sb.append(“\n String representing a Zero Out Value:”);
sb.append(strZeroOutValue);
System.out.println(sb.toString());
}
}
這個程序將產生下面的結果:
Null test: String initialized as null = null
String representing a Zero Out Value:
在JavaBean中, 我們將 I變量聲明為一個 int, 我們必須處理與該變量相關的值,因為I 默認的沒有值,int 類型無法初始化為 null, 如果int 值沒有進行明確的初始化,編譯器將提示錯誤。
執行 NullTest程序,將驗證在文本中空字符串空值的替代,用於顯示 SQL 的插入和更新。如果我們需要刪除一些信息,通過刪除表單區域的文本,需要將數據庫發送長度為0的字符串。
儘管大多數數據庫將空字符串作為空值進行操作,如果我們使用的數據庫不支持處理空字符串的話,我們必須寫入附加的java代碼,來創建自己的SQL插入聲明。
例如:
if(test.length==0)
{
sb.append(“null”);
}
else
{
sb.append(test);
}

Bean範圍

JavaBean 的範圍。 Scope 是一個具有生命時間的變量。JavaBean的範圍在
<jsp:useBean scope=”….>標誌中右邊進行表示。將產生一個JavaBean的快捷參考。
説明:jsp服務器引擎將剝離<jsp。。。。標記。並且在最終用户的瀏覽器上無法顯示實際代碼。
存在下面四種範圍: 頁面、 請求、 對話、 應用。
對話範圍:
對話範圍的JavaBean 主要應用於跨多個頁面和時間段: 例如填充 用户信息。 添加信息並且接受回饋,保存用户執行頁面的軌跡。對話範圍JavaBean保留一些和用户對話 ID 相關的信息。這些信息來自臨時的對話cookie,並在當用户關閉瀏覽器時,這個cookie將從客户端和服務器刪除。
頁面/請求範圍:
頁面和請求範圍的JavaBean有時類似表單的bean , 這是因為 他們大都用於處理表單。表單需要很長的時間來處理用户的輸入,通常情況下用於頁面接受HTTP/POST或者GET請求。另外頁面和請求範圍的bean可以用於減少大型站點服務器上的負載,如果使用對話bean,耽擱的處理就可能會消耗掉很多資源。
應用:
應用範圍通常應用於服務器的部件,例如 JDBC連接池、應用監視、擁護計數和其他參與用户行為的類。
在Bean中限制HTML的產生:
理論上,JavaBean 將不會產生任何HTML,因為這是jsp層負責的工作;然而,為了動態消息提供一些預先準備的格式是非常有用的。產生的HTML將被標註的 JavaBean方法返回。
這裏有一些非常重要的事情:
1. 不要試圖在JavaBean返回的HTML中放置任何字體尺寸。
並不是所有的瀏覽器都相同。很多瀏覽器無法處理完整的字體尺寸。
2. 不要試圖在JavaBean返回的HTML中放置任何腳本或者DHTML。
向頁面直接輸出腳本或者DHTML相當於自我毀滅,因為某些瀏覽器版本在處理不正確的腳本時會崩潰(非常少但是有)。如果用户的JavaBean在運行時是動態的推出複雜的HTML語言,用户將陷入調試的噩夢。另外,複雜的HTML將限制JavaBean的壽命和靈活性。
3. 不要提供任何的選擇。
如果用户使用不同的系統瀏覽頁面,可以提供一種可以替換的方法。

Bean主要區別

Java Bean 是可複用的組件,對Java Bean並沒有嚴格的規範,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由於Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上相當於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被部署在諸如Websphere、WebLogic這樣的容器中,EJB客户從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客户通過容器來訪問真正的EJB組件。