Java架構之Java Bean

來源:互聯網
上載者:User

標籤:date   targe   顯示   大本營   建議   很多   getx   ack   res   

連結 知乎https://www.zhihu.com/question/19773379 總結

符合一定規範的編寫的Java類,不是一種技術,而是一種規範。大家對於這種規範,總結了很多開發技巧,工具函數。

1、所有屬性為private
2、提供預設構造方法
3、提供getter和setter
4、實現serializable介面

 

 

    在java1996年發布,當年12月即發布了java bean1.00-A,有什麼用呢?通過統一的規範可以設定對象的值(get,set方法),這是最初的java bean;

  • 在實際企業開發中,需要實現事務,安全,分布式,javabean就不好用了.sun公司就開始往上面堆功能,這裡java bean就複雜為EJB;
  • EJB功能強大,但是太重了.此時出現DI(依賴注入),AOP(面向切面)技術,通過簡單的java bean也能完成EJB的事情,這裡的java bean簡化為POJO;
  • Spring誕生了.
  • PO(persistence object):用於持久化時(例如儲存到資料庫或者緩衝);
  • VO(value object):用於前端展示使用(例如放置到JSP中解析或者給前端傳遞資料)
  • DTO(data transfer object):用於介面互相調用返回,資料轉送(例如很多介面調用傳回值或訊息佇列內容);


主要區分三個:JavaBean,EJB,POJO。
JavaBean
JavaBean是公用Java類,但是為了編輯工具識別,需要滿足至少三個條件:
  1. 有一個public預設構造器(例如無參構造器,)
  2. 屬性使用public 的get,set方法訪問,也就是說設定成private,同時get,set方法與屬性名稱的大小也需要對應。例如屬性name,get方法就要寫成,public String getName(){},N大寫。
  3. 需要序列化。這個是架構,工具跨平台反映狀態必須的

EJB
在企業開發中,需要可伸縮的效能和事務、安全機制,這樣能保證企業系統平滑發展,而不是發展到一種規模重新更換一套軟體系統。 然後有提高了協議要求,就出現了 Enterprise Bean。
EJB在javabean基礎上又提了一些要求,當然更複雜了。
POJO
有個叫Josh MacKenzie人覺得,EJB太複雜了,完全沒必要每次都用,所以發明了個POJO,POJO是普通的javabean,什麼是普通,就是和EJB對應的。
總之,區別就是,你先判斷是否滿足javabean的條件,然後如果再實現一些要求,滿足EJB條件就是EJB,否則就是POJO。


Java語言欠缺屬性、事件、多重繼承功能。所以,如果要在Java程式中實現一些物件導向編程的常見需求,只能手寫大量膠水代碼。Java Bean正是編寫這套膠水代碼的慣用模式或約定。這些約定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述約定的類可以用於若干工具或庫。

 

Java Bean的設計目的

1、緊湊方便地建立和使用

2、完全的可移植性

3、繼承Java的強大功能

4、開發工具支援

5、分散式運算支援

Java Bean定義為“一種在開發工具中可視化操作的,可複用的,平台獨立的軟體組件“

Java Bean的特性

1、支援自檢:構造器可以分析bean怎樣工作;

2、支援定製:使用者使用構造器工具定製bean的外觀和行為;

3、支援事件處理:bean才能與外部進行通訊;

4、支援屬性:bean才能具有內容的狀態,便於定製和應用開發;

5、支援永久性:bean才能在應用程式構造器工具中定製,並將定製的狀態儲存起來便於隨時使用。


Java 帝國之Java bean (上)原創 2016-05-27 劉欣 碼農翻身前言: 最近看到到spring 的bean 配置, 突然想到可能很多人不一定知道這個叫bean的東西的來龍去脈, 所以就寫個文章來講一下。
另外,上次出了開源中國抄襲事件, 為了防止轉載以後我的公眾號資訊被故意刪除, 我在文章的內容中加上了一些 劉欣(公眾號:碼農翻身) 這樣的字樣, 可能會造成一些煩擾, 請見諒。 我一手創立的Java帝國剛剛成立不久,便受到巨大的打擊, 我派出去佔領案頭開發的部隊幾乎全軍覆沒。 
情報說微軟的Visual Basic 和Borland的Delphi最近在宣傳什麼組件化開發, 難道就是這東西把我們搞垮了? 
劉欣(公眾號:碼農翻身)註:參見《Java :一個帝國的誕生》和《Basic: 一個老兵的自述》

我趕緊買了一個Visual Basic 過來研究, 果然,這個傢伙確實是方便, 最讓我驚歎的是:它有一個可視化編輯器 ! 
我只需要把一個組件(例如按鈕)拖拽到可一個表單上,  設定一下屬性 (顏色,字型), 再添加一個事件(onClick), 最後在onClick中寫點代碼就搞定了 !
不僅如此,我自己也可以把My Code按規範封裝成一個組件, 發布出去讓別人使用。
我看著手下給我買來的《程式員大本營》光碟片, 裡邊竟然包含了好幾千個這樣的組件, 有資料庫瀏覽組件, 計時器組件, 顏色選取組件, 甚至還有收發郵件的組件......
天哪, 這以後開發傳統型程式豈不太簡單了 !
怪不得我的Java 被打得滿地找牙!
劉欣(公眾號:碼農翻身)註: 90年代末的程式員和學生估計都知道《程式員大本營》, 由csdn的創始人蔣濤製作。
我趕緊打電話給我的幹將小碼哥 : 小碼啊, 你趕緊看看這個Visual Basic 和Delphi , 給你7天時間, 我們Java 也得趕緊搞一套這樣的東西出來。
小嗎毫不含糊, 三天就給我搞了一個東西出來: Java Bean API 規範 。
我翻開一看, 哇塞, 長達114頁 , 於是問他:“這是什麼東西? 我要的可視化編輯器呢Visual Java 呢? ”
劉欣(公眾號:碼農翻身)註: 我下載瀏覽了java bean 的規範, 確實是114頁
他說: “老大, 我們是個開源的社區, 得充分利用大家的力量, 所以我沒有去做像VB和Delphi那樣的東西, 相反,我定義了一套規範, 只要大家按照這個規範做, 誰都可以用java 做出像VB那樣的可視化開發工具出來。”
“那你說說這個java bean 到底是什麼規範?”我問。
“首先,一個java bean 其實就是一個普通的java 類, 但我們對這個類有些要求: 
1. 這個類需要是public 的, 然後需要有個無參數的建構函式
2. 這個類的屬性應該是private 的, 通過setXXX()和getXXX()來訪問
3. 這個類需要能支援“事件”, 例如addXXXXListener(XXXEvent e),  事件可以是Click事件,Keyboard事件等等, 當然咱們也支援自訂的事件。 
4. 我們得提供一個所謂的自省/反射機制, 這樣能在運行時查看java bean 的各種資訊“
5. 這個類應該是可以序列化的, 即可以把bean的狀態儲存的硬碟上, 以便以後來恢複。 

“這些要求看起來也沒啥啊,對程式員來說,不就是個普通的java 類嗎? 到底該怎麼用? ” 
“我們幻想一下,假設我們的Java bean 大行其道了, 有個使用者在用一個Visual Java Builder  這樣的可視化開發工具, 當他用這個工具建立應用的時候, 可以選擇一個叫JButton的組件, 加到一個表單上, 此時Visual Java Builder 就需要把這JButton的類通過反射給new 出來, 所以就需要一個無參數的建構函式了。”
“如果使用者想去設定一下這個JButton的屬性,Visual Java Builder 就需要先用自省/反射來擷取這個JButton有哪些屬性(通過getter/setter), 拿到以後就可以給使用者顯示一個 屬性清單了, 例如背景色, 字型 等等。使用者看到後就可以設定背景色和字型了,  此時Visual Java Builder 在內部就需要調用這個Bean的setBackgroundCorlor()/setFont() 等方法, 這就是所謂的setXXXX()方法。”
“如果使用者想對這個JButton編程, Visual Java Builder 還是通過自省/反射來擷取這個JButton有哪些事件, 給使用者展示一個 事件清單,例如click , keyboardPressed 使用者可以選取一個, 然後就可以寫程式對這個事件編程了。”
“可是那個序列化有什麼用呢?”
“這是因為使用者設計完了以後,可能關掉Visual Java Builder 啊 , 如果不通過序列化把設計好的JButton儲存起來, 下次再開啟Visual Java Builder , 可就什麼都沒有了”
我想了想, 小碼哥設計的不錯,僅僅用了一個簡單的規範就滿足了可視化編輯器的所有要求。 

"那我們就發布這個規範吧, 咱們自己先做一個可視化編輯器,給別人做個榜樣, 名稱我都想好了, 叫 NetBean吧。"
劉欣(公眾號:碼農翻身)註:這是我杜撰的, 實際上NetBean這個名稱可能和java bean 並沒有實際關聯。 

果然不出我們所料, Java bean 發布以後, 有力的帶動了Java 的IDE市場,  開發Delphi的Borland公司 也來插了一腳,搞出了一個JBuilder, 風靡一時。 
IBM 搞了一個Visual Age for Java ,  後來搖身一變, 成了一個叫Eclipse的開放平台,超級受大家歡迎, 它反過頭來把我們的Netbean 和 JBuilder 逼的快沒有活路了。 
雖然我們玩的很歡,但是程式員根本不買賬, Java 在案頭開發市場還是沒有起色,使用Java bean 建立傳統型程式的程式員少之又少, 只有部分像金融、ERP這樣的領地還在堅持。   
看來是無藥可救了。 
但是Java bean 何去何從 ? 丟棄掉太可惜了,   我和小碼哥商量了一下, 我們覺得:既然我們Java在統治了伺服器端的編程, 還是在那裡想想辦法吧......Java 帝國之Java bean(下)原創 2016-05-29 劉欣 碼農翻身上一篇提到Java bean 的規範雖然定義的不錯, 但卻沒有獲得意料中的成功, 尤其是Java帝國所期待的案頭開發組件化市場上。 
我和小碼哥多麼期待CSDN也能出一期《程式員大本營》, 裡邊包含成千上萬的java bean 組件啊。
不要幻想了, 趕緊把java bean 應用在伺服器端才是正事。 JSP + Java Bean小碼哥建議先用在jsp上試試,  可以用java bean 來封裝商務邏輯,儲存資料到資料庫, 像這樣:(公眾號"碼農翻身"註: 這其實叫做JSP Model 1 )
其中jsp 直接用來接受使用者的請求, 然後通過java bean 來處理業務, 具體的使用方法是:<jsp:useBean id="user" scope="page" class="com.coderising.User"/><jsp:setProperty property="userName" name="user" param="userName"/><jsp:setProperty property="password" name="user" param="password"/>
這就能把HTTP request中的所有參數都設定到 user 這個java bean 對應的屬性上去。 
如果想偷懶, 還可以這樣:
<jsp:setProperty name="user" property="*"/>
當然要保證 http request中的參數名和 java bean 中的屬性名稱是一樣的。 
這個叫做JSP Model 1 的模型受到了很多Java程式員的歡迎 ,  因為他們的應用規模都很小, 用Model 1 使得開發很快速。
實際上, 這種方式和微軟帝國的asp , 以及和開源的php 幾乎一樣。 
但很快就有人來找我抱怨了, 說他們的項目中使用了Model 1 導致整個系統的崩潰。 
他說: “你知道嗎? 我們的系統中有好幾千個jsp, 這些jsp互相調用(通過GET/POST), 到了最後調用關係無人能搞懂。 ”
其實我們已經預料到了, 小碼哥對此有個形象的比喻:意大利麵條這幾千個JSP 就像這碗麵條一樣,攪在一起, 根本理不清楚。
為瞭解決這個問題,小碼哥又推出了 :JSP Model 2 ,    這是個模型真正的體現了Model-View-Controller的思想:Servlet 充當Controller ,  jsp 充當 View Java bean 當然就是Model 了!
商務邏輯, 頁面顯示, 和處理過程做了很好的分離。 
基於這個模型的擴充和改進,  很多Web開發架構開始如雨後春筍一樣出現, 其中最著名的就是Struts, SpringMVC 了。
Java Web開發迅速的繁榮了。 
我們再一次體會到了開放的好處 !



Java架構之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.