普通旧 Java 对象 (POJO) 是什么意思?

新手上路,请多包涵

普通旧 Java 对象 (POJO) 一词是什么意思?我找不到任何足够的解释。

POJO 的维基百科页面 说 POJO 是一个普通的 Java 对象,而不是一个特殊的对象。现在,Java 中什么使 and object 有什么特殊之处?

上面的页面还说 POJO 不应该扩展预先指定的类、实现预先指定的接口或包含预先指定的注释。这是否也意味着不允许 POJO 实现接口,如 SerializableComparable 或类如 Applets 或任何其他用户编写的类/接口?

另外,上述政策(不扩展,不实施)是否意味着我们不允许使用任何外部库?

POJO 究竟用在哪里?

编辑: 更具体地说,我是否可以扩展/实现属于 Java 或任何外部库的类/接口?

原文由 Nikit Batale 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
1 个回答

Plain Old Java Object 这个名字用来强调给定的对象是一个普通的 Java 对象,而不是像 EJB 2 框架定义的那样的特殊对象。

A类{}

B 类扩展/实现 C {}

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

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

使用类 A 对象引用的代码不必知道有关它的类型的任何信息,并且它可以与许多框架一起使用。

因此 POJO 不必 1) 扩展预先指定的类和 2) 实现预先指定的接口。

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

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

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

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

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

在实践中,有些人认为注释很优雅,而他们认为 XML 冗长、丑陋且难以维护,而另一些人则认为注释污染了 POJO 模型。因此,作为 XML 的替代品,许多框架(例如 Spring、EJB 和 JPA)允许使用注释来代替 XML 或与 XML 一起使用:

优点:

将应用程序代码与基础架构解耦是使用 POJO 的众多好处之一。使用 POJO 通过将应用程序的业务逻辑从易变的、不断发展的基础架构框架中解耦出来,可以在未来证明您的应用程序的业务逻辑。升级到新版本或切换到不同的框架变得更加容易且风险更低。 POJO 还使测试更容易,从而简化和加速开发。您的业务逻辑将更加清晰和简单,因为它不会与基础架构代码纠缠在一起

参考资料: wiki source2

原文由 Kanagavelu Sugumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏