时间:2010-07-24 18:29:33

标签: java terminology pojo

8 个答案:

答案 0 :(得分:57)

普通旧Java对象该名称用于强调给定对象是普通Java对象,而不是EJB 2框架定义的特殊对象。

A级{} B类扩展/实现C {}

注意:当C是一种分布式框架类或ifc时,B是非POJO。 例如javax.servlet.http.HttpServlet,javax.ejb.EntityBean或J2EE extn 而不是可序列化/可比较的。由于可序列化/可比较对POJO有效。

这里A是一个独立的简单对象。 B是特殊的obj,因为B正在扩展/实现C.所以B对象从C获得更多意义,B是限制性地遵循C中的规则而B与紧密耦合与分布式框架。因此,B对象不是其定义中的POJO。

使用类A代码引用的代码不必知道它的类型,它可以与许多框架一起使用。

所以POJO不应该1)扩展预先规定的类和2)实现预先指定的接口。

JavaBean是POJO的一个示例,它是可序列化的,具有无参数构造函数,并允许使用遵循简单命名约定的getter和setter方法访问属性。

POJO纯粹关注业务逻辑,并且不依赖于(企业)框架。 这意味着它具有业务逻辑的代码,但是如何创建该实例,该对象属于哪个服务(EJB ..)以及它具有的特殊特性(Stateful / Stateless)将由框架通过使用外部xml来决定文件。

示例1:JAXB是将Java对象表示为XML的服务;这些java对象很简单,并提供了默认的构造函数getter和setter。

示例2:Hibernate,其中简单的java类将用于表示Table。列将是它的实例。

示例3:REST服务。在REST服务中,我们将使用Service Layer和Dao Layer来对DB执行某些操作。所以Dao将有供应商特定的查询和操作。服务层将负责调用哪个DAO层来执行数据库操作。创建或更新DAO的API(方法)将POJO作为参数,并更新POJO并插入/更新到DB。这些POJO(Java类)将只包含每列的状态(实例变量)及其getter和setter。

在实践中,有些人发现注释优雅,而他们认为XML冗长,丑陋且难以维护,而其他人则发现注释会污染POJO模型。 因此,作为XML的替代方案,许多框架(例如Spring,EJB和JPA)允许使用注释来代替或者使用XML:

优点:
将应用程序代码与基础结构框架分离是使用POJO的众多好处之一。使用POJO可以通过将其与不断变化的不断变化的基础架构框架分离,来证明应用程序的业务逻辑。升级到新版本或切换到不同的框架变得更容易,风险也更小。 POJO还使测试更容易,这简化并加速了开发。您的业​​务逻辑将更清晰,更简单,因为它不会与基础架构代码纠缠在一起

参考文献:wiki source2

答案 1 :(得分:10)

答案 2 :(得分:7)

答案 3 :(得分:6)

答案 4 :(得分:4)

答案 5 :(得分:3)

POJO的重点在于简单性,你似乎假设它比它看起来更复杂。

如果库支持POJO,则意味着任何类的对象都是可接受的。这并不意味着POJO不能有注释/接口,或者如果它们在那里它们将不被使用,但它不是必需的。

恕我直言维基页面相当清楚。它并没有说POJO不能有注释/接口。

答案 6 :(得分:0)

包含扩展程序的所有业务逻辑的普通旧Java对象(PO​​JO)。

浓淡包含单一方法的Pojo

public class Extension {
   public static void logInfo(String message) {
      System.out.println(message);
   }
}

答案 7 :(得分:0)

  

Plain Old Java Object(POJO)这个术语是什么意思?

POJO 是由Martin Fowler,Rebecca Parsons和Josh Mackenzie在2000年9月的一次会议上准备演讲时创造出来的。Patterns of Enterprise Application Architecture中的Martin Fowler解释了如何实现< Java中的em> Domain Model 模式。在列举了使用 EJB Entity Beans 的一些缺点之后:

  

人们谈论时总会产生大量的热量   在J2EE中开发域模型。许多教材和   介绍性的J2EE书籍建议您使用实体bean来开发   域模型,但这种方法存在一些严重问题,   至少使用当前的(2.0)规范。

     

使用Container Managed时,实体bean最有用   持久性(CMP)......

     

实体bean无法重入。也就是说,如果你从一个人那里打电话   实体bean进入另一个对象,即其他对象(或任何对象)   调用)无法回调到第一个实体bean ...

     

...如果你有远程对象,你可以得到细粒度的接口   可怕的表现......

     

要使用实体bean运行,您需要一个容器和一个数据库   连接的。这将增加构建时间并增加时间   进行测试运行,因为测试必须针对数据库执行。   实体bean也很难调试。

作为替代方案,他建议使用 Regular Java Objects 进行域模型实现:

  

另一种方法是使用普通的Java对象,尽管这种情况经常发生   引起惊讶的反应 - 令人惊讶的是有多少人这么想   您无法在EJB容器中运行常规Java对象。 我来了   人们忘记常规Java对象的结论是因为   他们没有一个奇特的名字。这就是为什么,在准备演讲时   2000年,Rebecca Parsons,Josh Mackenzie和我给了他们一个:POJO   (普通的旧Java对象)。 POJO域模型很容易组合在一起,   可以快速构建,可以在EJB容器外运行和测试,并且可以   独立于EJB(也许这就是EJB供应商不鼓励你的原因   使用它们。)

相关问题