普通旧 Java 对象 (POJO) 一词是什么意思?我找不到任何足够的解释。
POJO 的维基百科页面 说 POJO 是一个普通的 Java 对象,而不是一个特殊的对象。现在,Java 中什么使 and object 有什么特殊之处?
上面的页面还说 POJO 不应该扩展预先指定的类、实现预先指定的接口或包含预先指定的注释。这是否也意味着不允许 POJO 实现接口,如 Serializable
, Comparable
或类如 Applets 或任何其他用户编写的类/接口?
另外,上述政策(不扩展,不实施)是否意味着我们不允许使用任何外部库?
POJO 究竟用在哪里?
编辑: 更具体地说,我是否可以扩展/实现属于 Java 或任何外部库的类/接口?
原文由 Nikit Batale 发布,翻译遵循 CC BY-SA 4.0 许可协议
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