普通的旧 Java 对象该名称用于强调给定对象是普通的 Java 对象,而不是 EJB 2 框架定义的特殊对象。
类 A {}
类 B 扩展/实现 C {}
注意:当C是分布式框架类或ifc时,B是非POJO。例如 javax.servlet.http.HttpServlet, javax.ejb.EntityBean 或 J2EE extn,而不是 serializeable/comparable。由于可序列化/可比较对 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对象很简单,并提出了默认的构造函数getters和setter。
示例 2:休眠,其中简单的 java 类将用于表示表。列将是其实例。
示例 3:REST 服务。在REST服务中,我们将有服务层和Dao层来执行一些基于DB的操作。因此,Dao将具有特定于供应商的查询和操作。服务层将负责调用哪个 DAO 层来执行数据库操作。DAO的创建或更新API(方法)将以POJO作为参数,并更新POJO并插入/更新到DB中。这些 POJO(Java 类)将只有每列及其 getter 和 setter 的状态(实例变量)。
在实践中,有些人认为注释很优雅,而他们认为XML冗长,丑陋且难以维护,但其他人发现注释污染了POJO模型。因此,作为XML的替代方案,许多框架(例如Spring,EJB和JPA)允许使用注释代替或补充XML:
优点:
将应用程序代码与基础结构框架分离是使用 POJO 的众多好处之一。使用 POJO 可将应用程序与易失性、不断发展的基础架构框架分离,从而满足应用程序业务逻辑的未来需求。升级到新版本或切换到其他框架变得更容易,风险更低。POJO还使测试更容易,从而简化和加速了开发。您的业务逻辑将更清晰、更简单,因为它不会与基础架构代码纠缠不清
参考资料 : 维基源码2