`
tianhandigeng
  • 浏览: 374307 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

究竟什么是POJO?(转载)

阅读更多

  POJO Plain Old Java Object )这种叫法 Martin Fowler Rebecca Parsons Josh MacKenzie 2000 年的一次演讲的时候提出来的。
      我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring3初学者实践教材》)的时候 发现POJO这个概念无法回避。现在网上对于POJO的解释很多,但是很多都是有错误的或者不够准确。对此我一开始也是存在误区的,我原来是这样理解的:
        POJO 是这样的一种“纯粹的” JavaBean ,在它里面除了 JavaBean 规范的方法和属性没有别的东西,即 private 属性以及对这个属性方法的 public get set 方法。我们会发现这样的 JavaBean 很“单纯”,它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。
    所以下面的代码被认为是POJO了。

package com.tongking.spring;

public class DbHello implements Hello {

       private DictionaryDAO dao;

       public void setDao(DictionaryDAO dao) {

              this.dao = dao;

       }

}

        其实,这样的认为是错误的,我仔细阅读了《POJOs in Action》这本书的有关部分和
POJO的最原始的出处http://martinfowler.com/bliki/POJO.html,
        The term was coined while Rebecca Parsons, Josh MacKenzie and I were preparing for a talk at a conference in September 2000. In the talk we were pointing out the many benefits of encoding business logic into regular java objects rather than using Entity Beans. We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it''s caught on very nicely.

基本的意思是我们要给具有业务逻辑处理的规则的Java对象( regular java objects)起了一个名字——POJO,这些Java对象不是EntityBeans(EJB的一种)。

        我又在http://www.webopedia.com/TERM/P/POJO.htm查到解释如下:

POJO , or Plain Old Java Object , is a normal Java object class (that is, not a JavaBean , EntityBean etc.)  and does not serve any other special role nor does it implement any special interfaces of any of the Java frameworks. This term was coined by Martin Fowler, Rebbecca Parsons and Josh MacKenzie who believed that by creating the acronym POJO, such objects would have a "fancy name", thereby convincing people that they were worthy of use.
        基本意思是说POJO一个正规的Java对象(不是JavaBean,EntityBean等),也不担当任何的特殊的角色,也不实现任何Java框架指定的接口。
        我觉得上面的解释很准确,POJO应该不是我们开始认为的JavaBean,当然更不是EJB,它不应该依赖于框架即继承或实现某些框架类或接口。例 如:Struts1中的Action和ActionForm当然不属于POJO了,而在Struts2中的Action由于可以不继承任何的接口,所以在 这种情况下Action是POJO,但是Struts2中的Action也可以继承ActionSupport类就不再属于POJO了。POJO里面是可 以包含业务逻辑处理和持久化逻辑,也可以包含类似与JavaBean属性和对属性访问的set和get方法的。
       最后,我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。

分享到:
评论
12 楼 mfkvfn 2011-02-18  
“POJO是一个简单的普通的Java对象,它包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口”

POJO可以包含业务逻辑或持久逻辑。
11 楼 ChinaHopes 2011-02-18  

这回字有四种写法

现在,Java是一门语言

现在感觉Java出了很多“红学家”

我只关心两点:

1、能解决问题不?

2、能赚钱不?
10 楼 抢街饭 2011-02-18  
我觉的POJO 它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。
9 楼 kongruxi 2011-02-17  
在Spring3 MVC里总是提倡将Controler不实现任何接口,而是写成POJO,然后加上注解,楼主觉得这样算不算是POJO呢?
8 楼 qiushily2030 2011-02-17  
pojo  例如 你写的一个没继承别的类的javaBean
7 楼 sulong 2011-02-17  
<div class="quote_title">piabo2161978 写道</div>
<div class="quote_div">
<div class="quote_title">tianhandigeng 写道</div>
<div class="quote_div">
<span style="font-size: medium;">       最后,我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。</span> </div>
<p><br><span style="font-size: small;">说成“正规”的并不合适,而应该是老式的,它是相对ejb新式的java对象而言。java对象不能分正规、非正规,一切皆为对象。</span></p>
<p> </p>
<p><span style="font-size: small;">pojo一般没有业务逻辑处理和持久化处理。</span></p>
<p><span style="font-size: small;">pojo有了业务逻辑处理通常称为Domain Model(域模型)</span></p>
<p><span style="font-size: small;">pojo有了持久化处理通常称为PO(Persistant Object持久化对象)</span></p>
<p> </p>
<p> </p>
</div>
<p>pojo和领域模型,持久化对象之间没有什么关生系吧?pojo可以是领域模型,也可以不是领域模型,可以是持久化对象也可以不是持久化对象;同样的,领域模型可以是pojo,也可以不是pojo(比如是ejb),持久对象可以是pojo,也可以不是pojo(比如ejb2的 Entity Bean)。不仅如此,pojo有了业务逻辑处理,不一定就是domain model,因为可能你的项目根本就没有使用DDD;pojo有了持久化处理也不一定就是PO,因为你的程序中可能根本就没有把对象存储入数据库的概念,持久化处理只是做做普通的SQL而已。反正这三个概念没什么必然的关系。</p>
6 楼 kingsword588 2011-02-17  
kjj 写道
只是个相对概念,不了解jee历史的人当然不会理解,如ls所言,当时ejb刚出来,一个对象承载了,事务,等各种借口功能,用户苦不堪言,所以才有了返璞归真这类pojo,仅此而已

5 楼 piabo2161978 2011-02-17  
<div class="quote_title">tianhandigeng 写道</div>
<div class="quote_div">
<span style="font-size: medium;">       最后,我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。</span> </div>
<p><br><span style="font-size: small;">说成“正规”的并不合适,而应该是老式的,它是相对ejb新式的java对象而言。java对象不能分正规、非正规,一切皆为对象。</span></p>
<p> </p>
<p><span style="font-size: small;">pojo一般没有业务逻辑处理和持久化处理。</span></p>
<p><span style="font-size: small;">pojo有了业务逻辑处理通常称为Domain Model(域模型)</span></p>
<p><span style="font-size: small;">pojo有了持久化处理通常称为PO(Persistant Object持久化对象)</span></p>
<p> </p>
<p> </p>
4 楼 月落码农 2011-02-17  
kjj 写道
只是个相对概念,不了解jee历史的人当然不会理解,如ls所言,当时ejb刚出来,一个对象承载了,事务,等各种借口功能,用户苦不堪言,所以才有了返璞归真这类pojo,仅此而已


正解
3 楼 kjj 2011-02-17  
只是个相对概念,不了解jee历史的人当然不会理解,如ls所言,当时ejb刚出来,一个对象承载了,事务,等各种借口功能,用户苦不堪言,所以才有了返璞归真这类pojo,仅此而已
2 楼 sulong 2011-02-16  
POJO Plain Old Java Object是相对于被容器管理的ejb来说的概念,按字面意思就是普通的旧式的java对象。在提出这个概念的那个时代,ejb还是比较流行的,但是ejb开发起来非常不方便,要求类实现特殊的接口,按照奇怪的方式定义方法,并通过奇怪的方式调用它,运行时ejb的生命周期也相当复杂。也许在当时ejb是不普通的新式的java对象,相对的,人们就起了个pojo这个名字来称呼那些不像ejb那样的普通的老式的对象。现在连ejb3也pojo了,非pojo的东西倒是少见了,没有对比,pojo也没有那么显眼了。
1 楼 mjking2005 2011-02-16  
感觉类完全不和外部框架契合的情况是很少见的
我可否认为,在提到POJO这一概念时,是相对而言的,如在描述某框架时,提到POJO是指没有为此框架提供特殊接口的业务对象

相关推荐

    数据表生成pojo

    1. **什么是POJO?** - POJO是Java中一个普通的类,没有继承任何特定的框架接口或实现任何特定的规范。它只是一个包含属性(字段)和方法(包括getter和setter)的对象,用于封装业务数据。 - 在数据库操作中,...

    java Pojo转Map

    在Java编程中,Pojo(Plain Old Java Object)是一种简单的对象模型,通常用于表示数据实体。Map接口则是Java集合框架的一部分,它提供了键值对的数据存储方式,方便数据的存取。将Pojo对象转换为Map,可以简化数据...

    Mybatis生成pojo插件

    然而,通过"Mybatis pojo插件",我们可以极大地提高开发效率,自动根据数据库表结构生成对应的POJO类。 首先,我们来看一下如何安装和配置这个插件。在Eclipse这样的集成开发环境中,你可以通过以下步骤进行: 1. ...

    POJO In action 代码

    《POJO In Action》是一本深入探讨Plain Old Java Object(POJO)概念和技术的书籍,其核心在于如何在Java开发中有效地使用简单、无框架依赖的对象。POJOs是Java编程中最基本的元素,它们代表了纯粹的面向对象设计,...

    SSM笔记-POJO

    本笔记主要探讨了如何在SpringMVC中使用POJO来处理请求参数,以及SpringMVC如何自动将请求参数填充到对应的POJO对象中。 首先,理解POJO的概念。POJO是一个简单的Java对象,没有特定的约束或依赖于任何框架。在SSM...

    json2pojo功能有点麻烦

    参照https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started的步骤Using jsonschema2pojo within your Java project (embedded)

    JAVA中的POJO、VO、PO、DO、DTO都是什么?有什么区别?

    以下是关于POJO、VO、PO、DO、DTO的详细解释及其区别。 1. POJO(Plain Old Java Object):POJO是一个通用术语,指没有特定框架限制的简单Java对象。它通常包含了业务逻辑和数据属性,不包含任何特定框架的注解或...

    POJO转Map.txt

    ### POJO转Map知识点详解 #### 一、POJO简介 在Java开发中,POJO(Plain Old Java Object)指的是一个简单的Java对象,通常用来表示应用程序中的数据模型或业务实体。POJO没有特定的框架依赖,它仅仅是一个具有...

    pojo生成器

    首先,我们来了解一下什么是POJO和JavaBean。POJO是一种简单的Java对象,它没有特定的接口或继承自特定的基类,不包含任何特定的框架注解,仅包含字段和相应的getter、setter方法。JavaBean则是一种符合特定规范的...

    hibernate tools 生成pojo

    **标题:“Hibernate Tools 生成POJO”** **一、Hibernate Tools 概述** Hibernate Tools是Hibernate项目的一个扩展,它提供了一系列实用工具,帮助开发者在Java应用程序中更方便地使用Hibernate ORM框架。这些工具...

    SSM项目实战pojo类

    在这个“SSM项目实战pojo类”中,我们主要探讨的是数据模型层,也就是POJO(Plain Old Java Object)类的设计与应用。 POJO是Java中一个简单的对象,它不附带任何框架特定的代码,通常用作持久化层的数据载体,用于...

    netty pojo 文档

    netty pojo netty pojo替换 channelbuffer

    用WebService传递POJO和对象数组的例子.doc

    首先,我们需要了解什么是POJO。POJO是指没有特定框架约束的普通Java对象,它提供了一种简单的方法来封装数据和行为。在Web服务上下文中,POJO可以被直接映射为服务的输入和输出参数,使得服务接口更直观、更易于...

    pojo类与javaBean

    ### POJO类与JavaBean详解 #### POJO类与JavaBean的概念 在Java开发领域,POJO类与JavaBean是两个常被提及的概念,它们在软件设计和编码实践中扮演着重要角色,尤其在构建可扩展性和维护性高的系统时更是不可或缺...

    实体类POJO生成器

    实体类(POJO)在Java开发中扮演着重要的角色,它是Plain Old Java Object的缩写,通常用于表示数据库中的表或者API的响应模型。当进行数据访问层的开发时,手动编写每个实体类可能会非常耗时,特别是面对大量的表...

    Struts2 Pojo(六)

    首先,让我们理解什么是Pojo。Pojo是一个没有特殊限制的普通Java对象,不包含任何框架特定的代码,如注解或接口实现。在Struts2中,Action类通常被设计为Pojo,这样可以使得业务逻辑与框架解耦,提高了代码的可重用...

    JPA的POJO生成

    本教程将深入探讨JPA的POJO(Plain Old Java Object)生成及其相关知识点。 首先,**POJO**是Java中一种简单的无特定约束的类,不依赖于任何框架或库,通常作为业务对象使用。在JPA中,POJO被用作实体类,这些实体...

    hibernate生成pojo

    ### Hibernate生成POJO详解 #### 一、简介 在Java开发中,Hibernate作为一个流行的ORM(Object Relational Mapping)框架,极大地简化了数据持久化的复杂度。通过Hibernate,开发者可以将对象模型映射到关系型...

Global site tag (gtag.js) - Google Analytics