JAVABEAN EJB POJO區別


1、POJO

    POJO(Plain Old Java Object)這種叫法是Martin Fowler、Rebecca Parsons和Josh MacKenzie在2000年的一次演講的時候提出來的。按照Martin Fowler的解釋是“Plain Old Java Object”,從字面上翻譯為“純潔老式的java對象”,但大家都使用“簡單java對象”來稱呼它。

 

POJO的內在含義是指那些:

有一些private的參數作為對象的屬性,然后針對每一個參數定義get和set方法訪問的接口。

沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的java對象。

public class User {  
  
    private String name;  
    private int age;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
} 

2、JavaBean

JavaBean 是一種JAVA語言寫成的可重用組件。JavaBean符合一定規范編寫的Java類,不是一種技術,而是一種規范。大家針對這種規范,總結了很多開發技巧、工具函數。符合這種規范的類,可以被其它的程序員或者框架使用。它的方法命名,構造及行為必須符合特定的約定:

1、所有屬性為private。

2、這個類必須有一個公共的缺省構造函數。即是提供無參數的構造器。

3、這個類的屬性使用getter和setter來訪問,其他方法遵從標准命名規范。

4、這個類應是可序列化的。實現serializable接口。 

因為這些要求主要是靠約定而不是靠實現接口,所以許多開發者把JavaBean看作遵從特定命名約定的POJO。

public class UserInfo implements java.io.Serializable{  
      
    //實現serializable接口。  
    private static final long serialVersionUID = 1L;  
      
    private String name;  
    private int age;  
      
    //無參構造器  
    public UserInfo() {  
          
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    //javabean當中可以有其它的方法  
    public void userInfoPrint(){  
        System.out.println("");  
    }  
}  

兩者有什么區別?

POJO其實是比javabean更純凈的簡單類或接口。POJO嚴格地遵守簡單對象的概念,而一些JavaBean中往往會封裝一些簡單邏輯。

pojo的格式是用於數據的臨時傳遞,它只能裝載數據, 作為數據存儲的載體,而不具有業務邏輯處理的能力。

而javabean雖然數據的獲取與pojo一樣,但是javabean當中可以有其它的方法。

 

3、DAO

DAO(data access objects)
DAO是數據訪問對象,DAO一般有接口和該接口的實現類,接口用於規范實現類。實現類一般用於操作數據庫,如對數據庫進行修改、添加、刪除等操作,一般直接調用公共類DAO。 


什么是DTO(data transfer object)、什么是VO(value object)、什么是PO(persistent object)?
我們通過DAO將POJO持久化為PO,用PO組裝出來VO、DTO。

總結下,我認為一個對象究竟是什么O要看具體環境,在不同的層、不同的應用場合,對象的身份也不一樣,而且對象身份的轉化也是很自然的。就像你對老婆來說就是老公,對父母來說就是子女。設計這些概念的初衷不是為了唬人而是為了更好的理解和處理各種邏輯,讓大家能更好的去用面向對象的方式處理問題。

比如:我們一張表有100個字段,那么對應的PO就有100個屬性。但是我們界面上只要顯示10個字段,客戶端用WEBservice來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端以后,如果用這個對象來對應界面顯示,那此時它的身份就轉為VO。

什么是BO(business object)?

BO: POJO在業務層的體現,對於業務操作來說,更多的是從業務上來包裝對象,如一個User的BO,可能包括name, age, sex, privilege, group等,這些屬性在數據庫中可能會在多張表中,因為每一張表對應一個PO,而我們的BO需要這些PO組合起來(或說重新拼裝)才能成為業務上的一個完整對象。

4、EJB

EJB(Enterprise JavaBean): 我認為它是一組"功能"JavaBean的集合。上面說了JavaBean是實現了一種規范的Java對象。這里說EJB是一組JavaBean,的意思是這一組JavaBean組合起來實現了某個企業組的業務邏輯。這里的一組JavaBean不是亂組合的,它們要滿足能實現某項業務功能的搭配。找個比方,對於一身穿着來說,包括一頂帽子,一件衣服,一條褲子,兩只鞋。這穿着就是EJB,其它的就是一個JavaBean

SSH與EJB區別

EJB是一種javabean的組合規范,SSH是3個框架jar包的組合。

EJB本身是JavaEE的規范由容器廠商負責實現,也就是使用EJB,需要使用JavaEE服務器。而用SSH,直接用Web服務器, SSH中要解決的目標和EJB是一致的。EJB是大型的,SSH是輕量級的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM