POJO
(
Plain Old Java Object
)这种叫法
是
Martin Fowler
、
Rebecca Parsons
和
Josh MacKenzie
在
2000
年的一次演讲的时候提出来的。
我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring3初学者实践教材》)的时候
发现POJO这个概念无法回避。现在网上对于POJO的解释很多,但是很多都是有错误的或者不够准确。对此我一开始也是存在误区的,我原来是这样理解的:
POJO
是这样的一种“纯粹的”
JavaBean
,在它里面除了
JavaBean
规范的方法和属性没有别的东西,即
private
属性以及对这个属性方法的
public
的
get
和
set
方法。我们会发现这样的
JavaBean
很“单纯”,它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。
所以下面的代码被认为是POJO了。
package com.tongking.spring;
public class DbHello implements Hello {
private DictionaryDAO dao;
public void setDao(DictionaryDAO dao) {
this.dao = dao;
}
}
其实,这样的认为是错误的,我仔细阅读了《POJOs in Action》这本书的有关部分和
POJO的最原始的出处http://martinfowler.com/bliki/POJO.html,
The term was coined while Rebecca Parsons, Josh MacKenzie and I
were preparing for a talk at a conference in September 2000. In the
talk we were pointing out the many benefits of encoding business logic
into regular java objects rather than using Entity Beans. We wondered
why people were so against using regular objects in their systems and
concluded that it was because simple objects lacked a fancy name. So we
gave them one, and it''s caught on very nicely.
基本的意思是我们要给具有业务逻辑处理的规则的Java对象(
regular java objects)起了一个名字——POJO,这些Java对象不是EntityBeans(EJB的一种)。
我又在http://www.webopedia.com/TERM/P/POJO.htm查到解释如下:
POJO
, or Plain Old Java Object
, is a normal Java
object
class (that is, not a JavaBean
,
EntityBean etc.) and does not serve any other special role nor does
it implement any special interfaces of any of the Java frameworks. This
term was coined by Martin Fowler, Rebbecca Parsons and Josh MacKenzie
who believed that by creating the acronym POJO, such objects would have
a "fancy name", thereby convincing people that they were worthy of
use.
基本意思是说POJO一个正规的Java对象(不是JavaBean,EntityBean等),也不担当任何的特殊的角色,也不实现任何Java框架指定的接口。
我觉得上面的解释很准确,POJO应该不是我们开始认为的JavaBean,当然更不是EJB,它不应该依赖于框架即继承或实现某些框架类或接口。例
如:Struts1中的Action和ActionForm当然不属于POJO了,而在Struts2中的Action由于可以不继承任何的接口,所以在
这种情况下Action是POJO,但是Struts2中的Action也可以继承ActionSupport类就不再属于POJO了。POJO里面是可
以包含业务逻辑处理和持久化逻辑,也可以包含类似与JavaBean属性和对属性访问的set和get方法的。
最后,我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
分享到:
相关推荐
1.使用Java 2.用cxf开发webservice 3.这个服务端和客户端的小demo 在服务端 对外开放接口服务,然后在客户端 调用服务端的方法, 实现客户端(一个javaweb项目)对服务端...劳烦评价 ,请大家支持原创 禁止转载
5. **Spring框架的角色**:Spring框架在此起到了关键作用,它提供了POJO(Plain Old Java Object)编程模型,使得开发人员可以不使用EJB,而是直接使用普通的Java类来实现业务逻辑。Spring的事务管理支持允许开发者...
在models模块中定义一些模型模块如User,Post等,这些类似与java中的Pojo或者Entity类。定义了模型的一些属性和方法。这些属性与数据库的字段相对应。routes中定义了请求分发处理的过程。比如到所有到根目录(/)的请求...
本文主要内容译自JacksonInFiveMinutes,增加了部分示例,转载请注明出处。 受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理json的java类库。Jackson的目标是为开发者提供快速、准确、轻...
什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java...