因爲是創業公司,開發人員較少,因此公司臨時決定讓幾個C的程序猿臨時客串Java。因此避免不了有不少基礎問題,今天就有兩我的都問我,JavaBean和POJO的區別,我可按照本身的理解給他們大體說了下,但是仔細一推敲發現本身好像沒有那麼透徹的講解很清楚,就查了下資料,記下了一些筆記和理解。html
JavaBean(官方解釋)是可複用的Java組件,嚴格遵循Sun定義的規範要求,JavaBean是一個標準,開發者能夠直接複用別人寫好軟件組件而沒必要理解它內部的工做機制。簡單來講一個JavaBean應該有下面幾個特色,java
>類應該是public的web
>屬性應該private的,對於屬性值的訪問應該是要經過getXX,setXX,isXXX方法,isXXX是用於檢查元素的值是不是Boolean的。數據庫
>該類應該有一個無參的構造函數,元素值的初始化要經過setXXX方法。設計模式
>這個類應該是實現了Serializable 接口(java.io.Externalizable
),這個是爲了持久化存儲的須要。api
例如:服務器
package com.example; import java.io.Serializable; public class Bar implements Serializable { private String name = null; private boolean flag = false; public Bar() { } public String getName() { return this.name; } public void setName(final String name) { this.name = name; } public boolean isFlag() { return this.flag; } public void setFlag(final boolean flag) { this.flag = flag; } }
EJB是運行在一個J2EE服務器上的Java類,它用於處理業務邏輯的,應該是這樣的:oracle
>有狀態(Stateful)less
>無狀態的(Stateless)函數
>實體(Entity)
>消息驅動Bean(Message Driven Beans)
舉例(無狀態Bean):
@Stateless public class EmployeeServiceBean { @PersistenceContext EntityManager em; public void addEmployee(Employee emp) { em.persist(emp); } } Read more: http://www.javaexperience.com/difference-between-pojo-javabean-ejb/#ixzz3otv2sKDE
說明:由於EJB2.0和EJB被要求是實現EJBobject 接口和指明EJB的部署類型,因此在EJB3.0中引入了註解來簡化開發步驟。
一個POJO沒有要求去實現了一個接口或者繼承一個類,也沒有任何的指導信息。POJO最大的不一樣之處就是它和EJB無關。Java是一個簡化的JavaBean,咱們之因此叫它是是簡化的bean是由於它只用於裝載數據而不用業務邏輯的處理。一個持久化的POJO就是PO,若是用於展現層那麼它就是VO .
持久對象,能夠當作是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄能夠用PO的集合。PO中應該不包含任何對數據庫的操做。
一個值對象就是一個含有值的對象,好比java.lang.Integer.VO:一般用於業務層之間的數據傳遞,和PO同樣也是僅僅包含數據而已。但應是抽象出的業務對象,能夠和表對應,也能夠不,這根據業務的須要.我的以爲同DTO(數據傳輸對象),在web上傳遞。
數據訪問對象,是一個sun的一個標準j2ee設計模式 .此對象用於訪問數據庫。一般和PO結合使用,DAO中包含了各類數據庫的操做方法。經過它的方法,結合PO對數據庫進行相關的操做。夾在業務邏輯與數據 庫資源中間。配合VO, 提供數據庫的CRUD操做。
領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。
視圖對象,用於展現層,它的做用是把某個指定頁面(或組件)的全部數據封裝起來。
用於調用DAO的業務邏輯類,而且將PO和VO聯合起來進行業務操做。
主要用於遠程調用中的傳輸對象。好比說,一個100個字段的表就對應於PO中的100個屬性,可是咱們的接口只須要10個字段。那麼咱們就能夠將只含有十個字段的DTO傳遞給客戶端使用。這不會向客戶端暴露表結構,一旦它和接口關聯起來,那麼它就是VO了。