答案 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还使测试更容易,这简化并加速了开发。您的业务逻辑将更清晰,更简单,因为它不会与基础架构代码纠缠在一起
答案 1 :(得分:10)
答案 2 :(得分:7)
答案 3 :(得分:6)
答案 4 :(得分:4)
答案 5 :(得分:3)
POJO的重点在于简单性,你似乎假设它比它看起来更复杂。
如果库支持POJO,则意味着任何类的对象都是可接受的。这并不意味着POJO不能有注释/接口,或者如果它们在那里它们将不被使用,但它不是必需的。
恕我直言维基页面相当清楚。它并没有说POJO不能有注释/接口。
答案 6 :(得分:0)
包含扩展程序的所有业务逻辑的普通旧Java对象(POJO)。
浓淡包含单一方法的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供应商不鼓励你的原因 使用它们。)