Java Bean 簡介及其應用

來源:互聯網
上載者:User

標籤:java bean   簡介   應用   

Bean的中文含義是“豆子”,顧名思義JavaBean是一段Java小程式。JavaBean實際上是指一種特殊的Java類,它通常用來實現一些比較常用的簡易功能,並可以很容易的被重用或者是插入其他應用程式中去。所有遵循一定編程原則的Java類都可以被稱作JavaBean。

 

一. Java Bean技術概述

        Java Bean是基於Java的組件模型,由屬性、方法和事件3部分組成。在該模型中,JavaBean可以被修改或與其他組件結合以產生新組件或完整的程式。它是一種Java類,通過封裝成為具有某種功能或者處理某個業務的對象。因此,也可以通過嵌在JSP頁面內的Java代碼訪問Bean及其屬性。

        Bean的含義是可重複使用的Java組件。所謂組件就是一個由可以自行進行內部管理的一個或幾個類所組成、外界不瞭解其內部資訊和運行方式的群體。使用它的對象只能通過介面來操作。

  二. Java Bean編寫規範

        Java Bean實際上是根據JavaBean技術標準所指定Bean的命名和設計規範編寫的Java類。這些類遵循一個介面格式,以便於使函數命名、底層行為以及繼承或實現的行為,其最大的優點在於可以實現代碼的可重用性。Bean並不需要繼承特別的基類(BaseClass)或實現特定的介面(Interface)。Bean的編寫規範使Bean的容器(Container)能夠分析一個Java類檔案,並將其方法(Methods)翻譯成屬性(Properties),即把Java類作為一個Bean類使用。Bean的編寫規範包括Bean類的構造方法、定義屬性和存取方法編寫規則。

 

2.1. Bean組件的工作機制

在JavaBeansVersion1.01 A規範中定義了該組件的5種重要機制:

(1)內省(Introspection):組建可以發表其支援的操作和屬性,同時也支援在其他組件中發現重複利用的物件程式庫,如使用者權限控制和電子郵件自動回複等。

(2)通訊(Communication):產生和收集組件的訊息事件。

(3)持續(Persistence):存放組件的狀態。

(4)屬性(Properties):支援組件布局的控制,包括組件佔用的空間和組件的相對位置。

(5)定製(Customization):開發人員可控制組件所需的改變機制。

 

2.2. Java Bean的編寫要求

        編寫JavaBean必須滿足以下幾點要求:

(1)所有的JavaBean必須放在一個包(Package)中。

(2)JavaBean必鬚生成public class類,檔案名稱應該與類名稱一致。

(3)所有屬性必須封裝,一個JavaBean類不應有公用執行個體變數,類變數都為private。

(4)屬性值應該通過一組存取方法(getXxx 和 setXxx)來訪問:對於每個屬性,應該有一個帶匹配公用getter 和 setter方法的專用執行個體變數。

(5)Java Bean 類必須有一個空的建構函式:類中必須有一個不帶參數的公用構造器,此構造器也應該通過調用各個屬性的設定方法來設定屬性的預設值。

 

2.3. Java Bean的命名規範

        Java Bean的命名規範如下:

(1)包命名:全部字母小寫。

(2)類命名:每個單字首大寫。

(3)屬性名稱:第一個單詞全部小寫,之後每個單字首大寫。

(4)方法名:與屬性命名方法相同。

(5)常量名:全部字母大寫。

 

2.4. Java Bean的包

        包即package,JavaBean的包和前面章節中介紹的包含義基本上是一樣的,但是也有區別,前面介紹的包都是Java本身定義的,而JavaBean的包是使用者自己定義的。

        每一個JavaBean源檔案被編譯成.class檔案後,都必須存放在相應的檔案夾下,存放這個.class檔案的檔案夾就是一個包。JavaBean的包必須存放在特定的目錄下,在每個JSP引擎中都規定了存放JavaBean包的位置,不同的JSP引擎對JavaBean存放的位置有不同的規定,如在Tomcat中,JavaBean的所有包都存放在WEB-INF/classes檔案夾中。如果存在多級目錄,則需要將.class檔案所在目錄的所有上級目錄包含到包名稱中,每一級目錄之間用英文標點“.”隔開。例如下面代碼:packagejsp.example.mybean;

 

2.5. Java Bean的結構

(1)屬性:即Java Bean類的成員變數,用於描述JavaBean對象的狀態,對象屬性值的改變觸發事件,屬性本身就是事件來源。

(2)方法:在Java Bean中,函數和過程統稱為方法,通過方法來改變和擷取屬性的值。方法可以分為構造方法、存取方法和普通方法等。

(3)事件:事件實際上是一種特殊的Java Bean,屬性值的改變觸發事件,事件激發相關對象作出反應,通過Java Bean註冊對象事件監聽者機制來接收、處理事件,它實現了Java Bean之間的通訊。

 

三. Java Bean屬性

        在上一節中我們簡單提到了JavaBean的屬性,Java Bean的屬性與一般Java程式中所指的屬性,或者說與所有物件導向的程式設計語言中對象的屬性是一個概念,在程式中的具體體現就是類中的變數。屬性分為四類,即單值(Simple)、索引(Index)、關聯(Bound)和約束(Constrained)屬性。本節將對這些屬性進行詳細說明。

 

3.1. 單值(simple)屬性

        單值(Simple)屬性是最普通的屬性類型,該類屬性只有一個單一的資料值,該資料值的資料類型可以是Java中的任意資料類型,包括類和介面等類型。

        定義了屬性,還需定義對應的存取方法,一般每個單值屬性都伴隨有一對get/set方法。屬性名稱與和該屬性相關的get/set方法名對應。例如如果有一個名為“xxx”的屬性,則會有setXxx和getXxx方法。

        另外,布爾(Boolean)屬性是一種特殊的單值屬性,它只有兩個允許值:true和false,如果有一個名為“xxx”的布爾屬性,則可以通過isX方法訪問。

 

3.2. 索引(Indexed)屬性

        如果需要定義一批同類型的屬性,使用單值屬性就會顯得非常煩瑣,為解決此問題,JavaBean中提供了索引(Indexed) 屬性,索引屬性是指JavaBean中數群組類型的成員變數。使用與該屬性對應的set/get方法可取得數組的值。索引屬性通過對應的存取方法設定或取得該屬性中某個元素的值,也可以一次設定或取得整個屬性的值。

 

3.3. 關聯(Bound)屬性

        關聯(Bound)屬性是指當該種屬性的值發生變化時,要通知其他的對象。每次屬性值改變時,這種屬性就觸發一個PropertyChange事件(在Java程式中,事件也是一個對象)。事件中封裝了屬性名稱、屬性的原值、屬性變化後的新值。這種事件傳遞到其他的Beans,至於接收事件的Beans應做什麼動作,由其自己定義。

        屬性的改變稱為JavaBean事件。外部與Java Bean這些事件相關的類對象稱為監聽者(Listener)。監聽者可能只對JavaBean某一屬性相關的事件有興趣,也可能對所有屬性相關的事件有興趣,因此JavaBean提供兩類事件監聽者註冊和登出的方法,即全域事件監聽者註冊、登出的方法一般事件監聽者註冊、登出的方法

 

3.4. 約束(Constrained)屬性

        Java Bean的屬性如果改變時,相關的外部類對象首先要檢查這個屬性改變的合理性再決定是否接受這種改變,這樣的JavaBean屬性叫約束(Constrained)屬性。當約束屬性的改變被拒絕時,改變約束屬性的方法產生一個約束屬性改變異常(PropertyVetoException),通過這個異常處理,JavaBean約束屬性還原回原來的值,並為這個還原作業發送一個新的屬性修改通知。

        約束屬性的改變可能會被拒絕,因此它的setXxx與一般其他JavaBean屬性的setXxx也有所不同。約束屬性的寫方法如下:

        public void setXxx(xxxType newXxx)throws PropertyVetoException

 

四. Java Bean方法

4.1. 構造方法

        Java Bean的構造方法與與之前的普通java類的構造方法意思是一樣的,就是對JavaBean的屬性及其方法進行初始化,即對所定義的屬性及方法設一個初始值,構造方法名要和JavaBean的類名相同。

 

4.2. 存取方法

       在定義了Bean的屬性,並通過構造方法將其初始化後,要讓其他程式訪問Bean的這些屬性,就必須為其建立存取方法。存取方法就是對組件中定義的屬性的訪問,包括讀和寫兩種訪問方式。讀就是一種用於取出Bean屬性的值的取值函數,即getter;而寫則是一種用於設定Bean屬性的賦值函數,即setter。以下列出的就是Bean屬性存取方法的具體文法格式:

        public void setPropertyName(PropertyTypevalue);//給屬性賦值,即寫方法

        public PropertyType getPropertyName();//讀取屬性值,即讀方法

 

4.3. 一般方法

        除了對屬性的存取方法外,還可以在Bean建立一般方法來實現對函數的調用,只要將Bean中的一般方法定義成公有的方法,就可以供其他程式調用。

 

五. Java Bean事件

        事件處理是JavaBeans體繫結構的核心之一。通過事件處理機制,可讓一些組件作為事件來源,發出可被描述環境或其他組件接收的事件。這樣,不同的組件就可在構造工具內組合在一起,組件之間通過事件的傳遞進行通訊,構成一個應用。從概念上講,事件是一種在“來源物件”和“監聽者對象”之間某種狀態發生變化的傳遞機制。事件有許多不同的用途,例如在Windows系統中常要處理的滑鼠事件、視窗邊界改變事件、鍵盤事件等。

 

5.1. 事件模型

        Java Bean事件模型,事件來源是一個JavaBean類對象,它把屬性改變的時間對象傳遞給事件監聽者,事件監聽者負責事件的處理。事件監聽者必須在事件來源註冊。

 

5.2. 事件狀態物件

        與事件發生有關的狀態資訊一般都封裝在事件狀態物件 (EventState Object) 中,這種對象是java.util.EventObject的子類。按設計習慣,這種事件狀態物件類的名應以Event結尾。例如代碼是一個滑鼠移動事件執行個體。

 

5.3. 事件監聽者介面與事件監聽者

        由於Java事件模型是基於方法調用的,因此需要一個定義並組織事件操縱方法的方式。JavaBeans中,事件操縱方法都被定義在繼承了java.util.EventListener類的事件監聽者(EventListener)介面中,按規定,EventListener介面的命名要以Listener結尾。任何一個類如果想操縱在EventListener介面中,定義的方法都必須以實現這個介面方式進行。這個類就是事件監聽者。例如如下代碼:

//先定義了一個滑鼠移動事件對象

public class MouseMovedExampleEventextends java.util.EventObject {

//在此類中包含了與滑鼠移動事件有關的狀態資訊

...

}

//定義了滑鼠移動事件的監聽者介面

interface MouseMovedExampleListener extends java.util.EventListener {

//在這個介面中定義了滑鼠移動事件監聽者所應支援的方法

void mouseMoved(MouseMovedExampleEvent mme);

}

 

5.4. 事件監聽者註冊與登出

        為了讓各種可能的事件監聽者把自己註冊入合適的事件來源中,就建立源與事件監聽者間的事件流,事件來源必須為事件監聽者提供註冊和登出的方法。在實際中,事件監聽者的註冊和登出要使用以下標準的設計格式:

public void add<ListenerType>(< ListenerType> listener);

public void remove<ListenerType>(< ListenerType> listener);

        下面是一個具體的執行個體,首先定義了一個事件監聽者介面:

import java.util.*;

public interface ModelChangedListenerextends EventListener

{ void modelChanged(EventObjecte);}

 

5.5. 適配類

        適配類是Java事件模型中極其重要的一部分。在一些應用場合,事件從源到監聽者之間的傳遞要通過適配類來“轉寄”。例如:當事件來源發出一個事件,而有幾個事件監聽者對象都可接收該事件,但只有指定對象做出反應時,就要在事件來源與事件監聽者之間插入一個事件適配器類,由適配器類來指定事件應該是由哪些監聽者來響應。適配類成為了事件監聽者,事件來源實際是把適配類作為監聽者註冊入監聽者隊列中,而真正的事件響應者並未在監聽者隊列中,事件響應者應做的動作由適配類決定。目前絕大多數的開發工具在產生代碼時,事件處理都是通過適配類來進行的。

 

六. Java Bean在JSP中的應用

        在前面我們學習了Java Bean的編寫,由於JavaBean是為了重複使用的程式段落具有“Writeonce, run anywhere, reuse everywhere”,即“一次性編寫,任何地方執行,所有地方可重用”的特點,所以可以為JSP平台提供一個簡單的、緊湊的和優秀的問題解決方案,能大幅度提高系統的功能上限、加快執行速度,而且不需要犧牲系統的效能。同時,採用JavaBean技術可以使系統更易於維護,因此極大地提高了JSP的應用範圍。

        前面介紹了通過JSP標記中的<jsp:useBean>動作來調用JavaBean,下面我們在學習完Java Bean的編寫之後,再來複習一下這個標記:

       <jsp:useBean id="beanId" scope="page|request|session|application" class="package.class"/>

       首先,我們通過標記中的id屬性標記Bean,以使JSP頁面的其餘部分可以正確的識別該Bean。

       其次,使用scope屬性來確定該Bean的使用範圍。scope屬性所決定的使用範圍。

       最後,class屬性通知JSP頁面從何處尋找Bean,即找到Bean的.class檔案。在此我們必須同時指定JavaBean的包(package)名和類(class)名,即class="package.class",否則JSP引擎將無法找到相應的Bean。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java Bean 簡介及其應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.