POJO

本文转载自百度文库,详细出处请参考: http://wenku.baidu.com/view/4a9ad533ee06eff9aef80765.html
我认为写的很准确,很抱歉没有找到作者的名字!
 
    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框架的类或接口。 
<think>好的,用户想了解Java中的POJO概念和用法。首先,我需要回忆POJO的定义,它代表Plain Old Java Object,即普通的Java对象,不依赖于特定框架的类。接下来,要解释POJO的特点,比如不继承特定类、不实现特定接口、没有注解等。然后,对比POJO和JavaBean的区别,JavaBean通常需要遵循更多规范,比如有无参构造函数、可序列化、getter/setter方法等。用户可能混淆这两者,需要明确区分。 接下来,用户可能想知道POJO的使用场景,比如在数据传输对象(DTO)、领域模型或与框架解耦的情况。要举例子说明,比如一个简单的User类,只有属性和对应的getter/setter方法,没有其他依赖。同时,结合用户提供的引用内容,引用[3]提到JavaBean的规范,可以用来对比POJO的不同之处,这样用户更清楚两者的区别。 然后,生成相关问题需要考虑用户可能的后续疑问,比如POJO与JavaBean的区别、使用优势、应用场景,以及如何在框架中使用POJO。确保问题覆盖常见疑惑点,帮助用户深入理解。 最后,检查回答是否符合格式要求,使用正确的中文,行内公式用$...$(虽然这个问题可能用不上数学公式,但保持结构一致),独立公式用$$...$$,不过这可能不需要。确认引用标记正确,如引用[3]关于JavaBean的规范,自然融入回答中。代码示例要简单明了,展示一个典型的POJO类结构,没有多余依赖,符合用户需求。</think>### POJO概念解析 POJO(Plain Old Java Object)指**不依赖特定框架、不实现特殊接口、不包含特殊注解的普通Java对象**。这种设计理念强调使用最基本的Java语法实现业务逻辑,保持代码的简洁性和可移植性[^1]。 #### 核心特征 1. **独立性**:不继承框架指定类,如`HttpServlet` 2. **轻量性**:不实现特殊接口,如`EJBObject` 3. **纯净性**:不包含框架特有注解,如`@Entity` 4. **自包含**:仅通过标准Java语法实现功能 ### 代码示例 ```java // 典型POJO示例 public class User { private String name; private int age; public User() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` ### 与JavaBean的对比 | 特性 | POJO | JavaBean | |-----------|---------------|----------------| | 规范要求 | 无强制要求 | 需遵循命名/行为规范 [^3] | | 序列化 | 可选 | 必须实现Serializable | | 构造函数 | 可有任意形式 | 必须有无参构造函数 | | 方法命名 | 自由格式 | 严格get/set前缀 | ### 主要应用场景 1. **数据传输对象**:在MVC架构中承载层间数据 2. **领域模型**:表示业务实体对象 3. **框架解耦**:便于在不同框架间迁移 4. **单元测试**:无需依赖容器即可测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值