close

** 以下是個人對於JavaBeans的心得與認知,定義的部份是根據書本上來的,某些用法是自己心得補充,沒有驗證的部份會採用灰色字體來表示,若你看到了我這篇文章,那麼請你針對灰色字體的部份存疑,若你找到了任何更加正確的資料,提供讓我知道我會非常感激你,但是請提供相關網址或參考來源。 **

JavaBeans最早是為了提供IDE開發環境的元件而定義出來的標準規範。JavaBeans在維護資料屬性的部分有其限制,符合這些限制的Class,搭配Reflection機制,可以進行自動化編譯、取用。

為了達到這樣的目的,JavaBeans有著一些定義和規範,滿足這三種規範的Class才能稱其為JavaBeans:

  • 必須實作 java.io.Serializable 和 java.io.Externalizable 兩個介面
  • 提供一個沒有引數的建構子
  • private屬性必須有相對應的 set/get 方法,並使用規定的命名方式

若是設計IDE開發環境內的元件,還必須繼承java.awt.Component。

java.io.Serializable 和 java.io.Externalizable 兩個介面只需實作其中之一,說實作也並非恰當,因為這兩者並無包含任何該實作的method,只要在class宣告之初加上implements Serializable 或是 implements Extrernalizable 即可,之後 JVM 自然會進行相關的處理,像是透過儲存機制在執行時將已初始化的beans從硬碟(或網路)中儲存和載入以保持永續性(persistence)。

永續性的意思是,任何重要的狀態可以用一致性的方式來儲存並取回,無論何時取用都能確保取回的reference是正確的狀態。

永續性對某些需要負載平衡或是failover的環境下非常重要,因為在這些環境中,運行於某個server上的reference,可能會被transfer到另外一台server上去執行,transfer過去的reference,必須讓接手的server知道本身的狀態,否則會造成資料的錯亂。

加上Serializable屬性的Class就是表示能夠將目前狀態儲存於檔案或是網路串流中,並可透過相同的機制來重建(反連續性,deserialization)。

並非所有屬性都需要正確的重建,不需要重建的屬性或method,則會加上 transient 來表示,所有有修飾字 transient 的屬性或method,都會在 deserialization 的過程中被重新建立,所以他們的值有可能與先前所建構的值不同。

在設計 JavaBeans 的屬性時,最好能先思考一下每一個變數在進行 transfer 的的各種狀況,若是該變數無法被正確的重建,最好能加上 transient 修飾。

在JSP檔案中使用beans時,透過<jsp:useBean>標籤來實現,id屬性是initial的名稱,在預設的生命週期(page)
內,可以透過id設定的名稱來存取,如下面範例

<jsp:useBean id="today" class="java.util.Date" />
<%= today.getTime() %>

 

arrow
arrow
    全站熱搜

    give 發表在 痞客邦 留言(1) 人氣()