天天看點

JavaBean,EJB,POJO彙總說明

什麼是JavaBean?

JavaBean 是一種JAVA語言寫成的可重用元件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數的構造器。JavaBean 通過提供符合一緻性設計模式的公共方法将内部域暴露成員屬性,set和get方法擷取。衆所周知,屬性名稱符合這種模式,其他Java 類可以通過自省機制發現和操作這些JavaBean 的屬性。——百科定義

JavaBean特性

  1. 有一個public預設構造器(例如無參構造器,)
  2. 屬性使用public 的get,set方法通路,也就是說設定成private,同時get,set方法與屬性名的大小也需要對應。例如屬性name,get方法就要寫成,public String getName(){},N大寫。
  3. 需要序列化。這個是架構,工具跨平台反映狀态必須的。實作java.io.Serializable 接口
JavaBean最初是為Java GUI的可視化程式設計實作的.你拖動IDE建構工具建立一個GUI 元件(如多選框),其實是工具給你建立java類,并提供将類的屬性暴露出來給你修改調整,将事件監聽器暴露出來.《java 程式設計思想(第四版)》
補充:JavaBean最初是為定義可重用的應用元件而設計的,但當時他們卻主要用作模型來建構使用者界面視窗部件(user interface widgets)。

PO(plain object):用于持久化時(例如儲存到資料庫或者緩存);

VO(value object):用于前端展示使用(例如放置到JSP中解析或者給前端傳遞資料)

DTO(data transfer object):用于接口互相調用傳回,資料傳輸(例如很多接口調用傳回值或消息隊列内容);

特别地,由于class不同,複制時一般推薦

https://github.com/springside/springside4/wiki

EJB

在企業開發中,需要可伸縮的性能和事務、安全機制,這樣能保證企業系統平滑發展,而不是發展到一種規模重新更換一套軟體系統。 然後有提高了協定要求,就出現了Enterprise Bean。EJB在javabean基礎上又提了一些要求,當然更複雜了。

EJB的特性

一個技術規範:EJB 從技術上而言不是一種”産品”

EJB 是一種标準描述了建構應用元件要解決的:

可擴充 (Scalable)

分布式 (Distributed)

事務處理 (Transactional)

資料存儲 (Persistent)

安全性 (Secure)

EJB的定義

EJB是Enterprise Java Bean 企業級JavaBean

EJB是遵守JavaBean規範的,也可以說是更加具體的JavaBean

EJB又分為SessionBean(會話Bean)、EntityBean(實體Bean)、MessageDriverBean(消息驅動Bean)

以下是它的定義:

EJB是一種伺服器端的元件架構,它使得人們能夠更加快捷、更加簡便地開發分布式、支援事務的、安全的和可移植的Java應用系統。

①Java語言編寫的

②伺服器端企業級應用元件

③可分布式部署的元件

④一般用于封裝企業應用的業務邏輯

基于元件的開發,其規範頒布了一組明确的EJB容器和EJB元件之間的契約,實作可移植性。

EJB元件在EJB容器中運作,EJB元件包含:EJB bean類、

EJB元件接口(遠端接口)、EJB Home接口

POJO

POJO:“Plain Old Java Object”

EJB太複雜了,完全沒必要每次都用,是以發明了個POJO,POJO是普通的javabean,什麼是普通,就是和EJB對應的。

總之,差別就是,你先判斷是否滿足javabean的條件,然後如果再實作一些要求,滿足EJB條件就是EJB,否則就是POJO。

POJO與JavaBean的差別

POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。

使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter、setter方法的類,沒有業務邏輯,有時可以作為VO(value -object)或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法,也不能攜帶有connection之類的方法。

POJO對象有時也被稱為Data對象,大量應用于表現現實中的對象。如果項目中使用了Hibernate架構,有一個關聯的xml檔案,使對象與資料庫中的表對應,對象的屬性與表中的字段相對應。

POJO 和JavaBean是我們常見的兩個關鍵字,一般容易混淆,POJO全稱是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻譯成:普通Java類,具有一部分getter/setter方法的那種類就可以稱作POJO,但是JavaBean則比 POJO複雜很多, Java Bean 是可複用的元件,對 Java Bean 并沒有嚴格的規範,理論上講,任何一個 Java 類都可以是一個 Bean 。但通常情況下,由于 Java Bean 是被容器所建立(如 Tomcat) 的,是以 Java Bean 應具有一個無參的構造器,另外,通常 Java Bean 還要實作 Serializable 接口用于實作 Bean 的持久性。 Java Bean 是不能被跨程序通路的。JavaBean是一種元件技術,就好像你做了一個扳子,而這個扳子會在很多地方被拿去用,這個扳子也提供多種功能(你可以拿這個扳子扳、錘、撬等等),而這個扳子就是一個元件。一般在web應用程式中建立一個資料庫的映射對象時,我們隻能稱它為POJO。POJO(Plain Old Java Object)這個名字用來強調它是一個普通java對象,而不是一個特殊的對象,其主要用來指代那些沒有遵從特定的Java對象模型、約定或架構(如EJB)的Java對象。理想地講,一個POJO是一個不受任何限制的Java對象(除了Java語言規範)。

POJO是一個簡單的普通的Java對象,它不包含業務邏輯或持久邏輯等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不繼承或不實作任何其它Java架構的類或接口。

多說一點:vo

vo有兩種說法,一個是viewObject,一個是valueObject..就拿前者來說吧,它隻負責封裝頁面傳遞過來的資料,這和PO有些不同..就拿struts1來說,ActionForm就是一個典型的viewObject. 而valueObject是頁面與頁面之間的傳遞時儲存值的對象….總的來說,PO是最終傳給BO以及BO傳個DAO的東西,他很多情況下與我們真正的資料庫表想對應.而viewObject是一個頁面上送出後的資料,不一定完全和PO的屬性相同

實際上沒差別 他們的功能都一樣 不過他們使用地點不一樣

po是在持久層所使用的 用來封裝原始資料 而VO則主要在視圖層活動 兩個JAVABEAN的使用範圍不同 假如你從資料庫取出來的原始資料 你可以通過業務層将資料進行封裝 再通過VO發到頁面上去