我不確定差異。我使用Hibernate,並且在某些書中,他們使用JavaBean和POJO作爲可互換的術語。我想知道是否有區別,不僅僅是在Hibernate上下文中,而是作爲一般概念。JavaBean和POJO有什麼區別?
回答
JavaBean遵循某些約定。 Getter/setter命名,具有公共默認構造函數,可串行化等。有關更多詳細信息,請參閱JavaBeans Conventions。
POJO(普通舊Java對象)沒有嚴格定義。它是一個Java對象,它不需要實現特定的接口或從特定的基類派生,或者使用特定的註釋來與給定的框架兼容,並且可以是任意的(通常相對簡單的) Java對象。
所有的JavaBeans都是POJO,但並非所有的POJO都是JavaBean。
一個JavaBean是一個Java對象滿足某些編程約定:
- 的JavaBean類必須實現串行化或外部化;
- JavaBean類必須具有公共的無參數構造函數;
- 所有的JavaBean屬性都必須具有public setter和getter方法(如適用);
- 所有JavaBean實例變量都應該是私有的。
根據Martin Fowler的一個POJO是一個對象,它封裝了業務邏輯,而一個Bean(除其他答案已經指出的定義)比一個容器而已保存數據和操作的對象上提供僅僅設置並獲取數據。
術語被創造出來,而麗貝卡帕森斯,約什 - 麥肯齊和我 在2000年9月準備在大會上發言。在我們 被指出編碼的業務邏輯的諸多好處會談到 常規的Java對象而不是使用Entity Beans。我們想知道爲什麼 人們反對在他們的系統中使用常規對象,並且 得出結論,這是因爲簡單的對象缺乏一個奇特的名字。所以 我們給了他們一個,它很好地被抓住了。
POJOS
與某些慣例(的getter/setter,公共無參數構造,私有變量),並且在動作(例如被用於通過讀取形式數據)是JAVABEANS
。
POJO:如果類可以與底層JDK來執行,而沒有任何其它外部第三方庫支持那麼其稱爲POJO
的JavaBean:如果類僅包含具有訪問器(setter和getter)的屬性的那些被稱爲JavaBeans的.Java beans通常不會包含任何商業邏輯,而是用於保存一些數據。
所有JavaBeans是POJO,但所有POJO都沒有的Javabean
POJO的 - 簡單Java對象
POJO類是沒有任何特色的普通類,類完全鬆散從技術/ framework.the再加類不是從技術/框架實現的,也不是從類被稱爲pojo類的技術/框架api擴展而來。
pojo類可以實現接口和擴展類,但超類或接口不應該是技術/框架。
例子:
1.
class ABC{
----
}
ABC類不執行或技術/框架,這就是爲什麼這是POJO類擴展。
2.
class ABC extends HttpServlet{
---
}
從servlet技術的API,這就是爲什麼這不是一個POJO類擴展ABC類。
3.
class ABC implements java.rmi.Remote{
----
}
ABC類從RMI API,這就是爲什麼這不是一個POJO類實現。
4.
class ABC implements java.io.Serializable{
---
}
這個接口是Java語言的一部分,而不是技術的一部分/ framework.so這是POJO類。
5.
class ABC extends Thread{
--
}
這裏線程也是類Java語言的,所以這是也是一個POJO類。
6.
class ABC extends Test{
--
}
如果測試類擴展或從技術/框架實現然後ABC也不是一個POJO類,因爲它繼承測試類的屬性。 如果Test類不是pojo類,那麼ABC類也不是pojo類。
現在這個點是一個例外情況
@Entity
class ABC{
--
}
@Entity
是Hibernate API或者JPA API給出的註解,但是我們仍然可以調用這個類是POJO類。 由技術/框架給出的註釋類被這種特殊情況稱爲pojo類。
- 1. JavaBean,POJO和普通類的區別?
- 2. Model,javabean和POJO之間的區別
- 3. java類繼承和javabean繼承之間有什麼區別?
- 4. 有什麼區別`和$(Bash中有什麼區別?
- 5. ==和===有什麼區別?
- 6. ==和===有什麼區別?
- 7. 有什麼區別? :和||
- 8. ==和===有什麼區別?
- 9. '=='和'==='有什麼區別?
- 10. `&`和`ref`有什麼區別?
- 11. 有什麼區別:。!和:r!?
- 12. | 0和~~有什麼區別?
- 13. Appender和〜有什麼區別?
- 14. xtype和別名有什麼區別?
- 15. 有什麼區別
- 16. 有什麼區別
- 17. 有什麼區別?
- 18. 有什麼區別?
- 19. 有什麼區別?
- 20. 有什麼區別
- 21. 有什麼區別?
- 22. 有什麼區別?
- 23. 有什麼區別
- 24. 有什麼區別
- 25. Microsoft.AspNet.WebApi.OData和Microsoft.Data.OData和Microsoft.AspNet.OData有什麼區別?
- 26. 什麼是javabean?
- 27. Viterbi CYK和Probabilistic CYK算法有什麼區別,有什麼區別嗎?
- 28. Erlang的Ports和RPC有什麼區別?
- 29. debug.write和Trace.write有什麼區別?
- 30. LocalContainerEntityManagerFactoryBean和LocalEntityManagerFactoryBean有什麼區別?
請注意,JavaBean可以並且通常是POJO,許多POJO實際上是JavaBean。 – 2009-09-08 14:21:17
不,根據POJO的定義,Java Bean不是* POJO,因爲被認爲是Java Bean,所以類必須遵循特定的編碼約定(例如,有一個沒有參數的構造函數,以「get」和/或「set」開頭的方法)或者與BeanInfo類一起分發。 – Nat 2009-09-08 14:36:11
因爲這些都是*約定*,所以我認爲你可以成功地爭論一個bean可以是一個POJO(例如,你不是從JavaBean接口或類似的東西繼承) – 2009-09-08 14:46:14