术语Plain Old Java Object (POJO)是什么意思?我找不到任何足够解释的东西。
POJO's Wikipedia page说POJO是一个普通的Java对象,而不是一个特殊的对象。那么,在Java中,是什么让和对象变得特别呢?
上面的页面还说,POJO不应该扩展预先指定的类,实现预先指定的接口或包含预先指定的注释。这是否也意味着POJO不允许实现像Serializable
、Comparable
这样的接口,或者像Applet这样的类,或者任何其他用户编写的类/接口?
另外,上面的政策(不扩展,不实现)是否意味着我们不允许使用任何外部库?
POJO到底用在哪里?
Java:更具体地说,允许我扩展/实现属于或任何外部库的类/接口吗?
发布于 2010-07-25 02:37:58
According to Martin Fowler,他和其他一些人提出了一种描述标准类而不是EJB等的方法。
发布于 2010-07-25 02:37:43
这个术语的用法意味着它应该告诉你什么。例如,如果一个依赖注入框架告诉你可以将一个POJO注入到任何其他的POJO中,他们想说的是你不需要做任何特殊的事情:不需要遵守任何与你的对象的约定,不需要实现任何接口或扩展特殊的类。你可以使用你已经拥有的任何东西。
更新以提供另一个示例: Hibernate可以将任何POJO (您创建的任何对象)映射到SQL表,而在核心数据(iPhone上的Objective C)中,您的对象必须扩展NSManagedObject,以便系统能够将它们持久化到数据库中。从这个意义上说,核心数据不能与任何POJO (或者更确切地说,POOCO=PlainOldObjectiveCObject)一起工作,而Hibernate可以。(我可能不是100%正确的re Core数据,因为我刚刚开始收集它。欢迎任何提示/更正:-) )。
发布于 2010-07-25 02:32:33
普通旧Java对象:)
你说得好像这些都是可怕的限制。
在通常使用POJO的上下文中,它更像是一种好处:
这意味着,无论您使用的是什么库/API,都完全愿意处理没有以任何方式被篡改或人为处理的Java对象,也就是说,您不需要做任何特殊的事情就可以让它们工作。
例如,Java处理器将(我认为)很高兴地序列化没有实现Serializable
接口的XStream类。这是一个加分!许多使用数据对象的产品都会强迫您实现SomeProprietaryDataObject
,甚至扩展AbstractProprietaryDataObject
类。许多库都期望bean行为,即getter和setter。
通常,与POJO一起工作的东西也会与不那么PO-JO一起工作,所以XStream当然也会序列化可序列化的类。
https://stackoverflow.com/questions/3326319
复制相似问题