Plain Old Java Object这个名字用来强调给定的对象是一个普通的 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..)以及它具有哪些特殊特征(有状态/无状态)将由框架通过使用外部 xml 决定文件。
示例 1:JAXB 是将 java 对象表示为 XML 的服务;这些 java 对象很简单,并提供了默认的构造函数 getter 和 setter。
示例 2:Hibernate,其中将使用简单的 java 类来表示一个表。列将是它的实例。
示例 3:REST 服务。在 REST 服务中,我们将有 Service Layer 和 Dao Layer 来对 DB 执行一些操作。所以 Dao 会有供应商特定的查询和操作。Service Layer 将负责调用哪个 DAO 层来执行 DB 操作。DAO 的创建或更新 API(方法)将以 POJO 作为参数,并更新 POJO 并将其插入/更新到 DB。这些 POJO(Java 类)将只有每列及其 getter 和 setter 的状态(实例变量)。
在实践中,有些人认为注解很优雅,而他们认为 XML 冗长、丑陋且难以维护,而另一些人则认为注解污染了 POJO 模型。因此,作为 XML 的替代方案,许多框架(例如 Spring、EJB 和 JPA)允许使用注解代替 XML 或作为 XML 的补充:
优点:
将应用程序代码与基础架构框架解耦是使用 POJO 的众多好处之一。使用 POJO 可以通过将应用程序的业务逻辑与易变的、不断发展的基础架构框架解耦来证明您的应用程序的业务逻辑。升级到新版本或切换到不同的框架变得更容易,风险也更小。POJO 还使测试更容易,从而简化和加速开发。您的业务逻辑会更清晰、更简单,因为它不会与基础架构代码纠缠在一起
参考资料:wiki source2