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>首先,用户的问题是:“我想了解POJO的概念及其在软件开发中的应用 请问POJO 定义 使用场景 软件开发”。我需要基于提供的引用来回答,但引用是站内的,我需要确保回答真实可靠。 关键点: - POJO 定义:POJO 代表普通的旧 Java 对象(Plain Old Java Object)。 - 使用场景:在软件开发中,POJO 主要用于数据传递、封装数据,而不涉及业务逻辑或框架依赖。 - 软件开发中的应用:POJO 常用于分层架构中,如作为数据载体,用于DTO、VO等。 从引用中提取信息: - 引用[1]:POJO 的特点包括简单纯粹(只包含数据字段和getter/setter)、独立性(不依赖框架)、数据载体。 - 引用[2]:POJO 是普通的 Java 对象,无特殊限制,用于提高可读性和可重用性。 - 引用[3]:在分层架构中,POJO 用于 BO(业务对象)、PO(持久化对象)等,封装数据。 - 引用[4]:涉及 AOP,但未直接讨论 POJO,所以可能不相关。 - 引用[5]:警告不要在 POJO 中使用基本数据类型,建议使用包装类,但这与定义相关。 用户要求生成相关问题,所以我需要在回答后添加相关问题。 回答结构: - 清晰、逐步解决问题。 - 使用中文。 - 在引用的段落末尾添加引用标识,如 [^1]。 系统级指令: - 行内数学表达式用 $...$,但这可能不需要数学表达式,因为主题是 POJO。 - 独立公式用 $$...$$,但同样,可能不适用。 - LaTeX 语法正确。 - 使用中文。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识。 组织回答: 1. **定义 POJO**:解释 POJO 是什么。 2. **特点**:描述 POJO 的特性。 3. **使用场景**:在软件开发中的应用。 4. **示例**:提供一个简单的代码示例。 5. **相关问题**:生成相关问题。 确保引用: - 当引用信息时,添加引用标识。 最终回答格式: - 开头:直接回答问题。 - 主体:逐步解释。 - 结束:相关问题。</think>### POJO 的概念及其在软件开发中的应用 #### 1. POJO 的定义 POJO(Plain Old Java Object)代表“普通的旧 Java 对象”,是一种简单的 Java 类,不依赖任何特定框架或容器。它只包含数据字段(属性)和基本的访问方法(如 getter 和 setter),而不包含业务逻辑、框架注解或外部依赖。POJO 的设计目标是提高代码的可读性、可重用性和独立性,使其易于在不同环境中移植[^2]。例如,一个典型的 POJO 类可能只定义私有字段、构造方法、getter 和 setter,没有任何 Spring 或 JPA 等框架的注解。 #### 2. POJO 的特点 POJO 的核心特点包括: - **简单纯粹**:POJO 仅作为数据载体,只包含数据字段和简单的访问方法,不嵌入业务逻辑或复杂依赖。这使其代码简洁且易于维护[^1]。 - **独立性**:POJO 不绑定到任何框架(如 Spring 或 Hibernate),因此可以在不同项目或分层架构中重用,无需修改代码[^1][^2]。 - **可移植性**:由于其轻量级设计,POJO 可以轻松地在不同层(如持久层、业务层或表示层)之间传递数据[^3]。 这些特点使 POJO 成为 Java 开发中的基础构建块,尤其在分层架构中广泛应用。 #### 3. POJO 在软件开发中的使用场景 POJO 在软件开发中主要用于数据封装和传递,常见于以下场景: - **数据载体**:在分层架构中,POJO 用于表示数据对象,例如在数据传输对象(DTO)、值对象(VO)或持久化对象(PO)中。例如,在 Web 应用中,POJO 可以将数据库查询结果封装为简单对象,传递给前端或业务层[^1][^3]。 - **业务对象封装**:在业务逻辑层,POJO 可以作为业务对象(BO)的组成部分。例如,一个简历管理系统中,“简历”可能是一个 BO,由多个 POJO(如“工作经历”或“学习经历”)组成,这些 POJO 负责存储和操作数据,而业务逻辑由其他类处理[^3]。 - **框架集成**:虽然 POJO 本身独立,但它常与框架结合使用。例如,在 Spring 中,POJO 可以通过 AOP(面向切面编程)添加日志或事务管理,而不污染核心代码。引用[4]展示了 AOP 如何通过切面增强 POJO 的功能,但 POJO 本身保持纯净[^4]。 - **测试和可重用性**:POJO 的简单性使其易于单元测试,因为不依赖外部环境。开发人员可以快速创建和模拟 POJO 对象,用于自动化测试[^2]。 #### 4. 示例代码 以下是一个简单的 POJO 示例,展示其结构。它仅包含数据字段和 getter/setter 方法,不涉及任何业务逻辑或框架依赖。 ```java public class UserPOJO { private Long id; // 使用包装类型,避免基本数据类型问题[^5] private String username; private String email; // Getter 和 Setter 方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ``` 在这个例子中,`UserPOJO` 仅用于存储用户数据,可以在 DAO 层用于数据库操作,或在 Service 层作为数据传输对象[^1][^3]。 #### 5. 注意事项 - **避免基本数据类型**:在 POJO 中,应使用包装类(如 `Long` 而非 `long`),以避免空指针异常和序列化问题[^5]。 - **与框架的区分**:POJO 不应被误用为包含业务逻辑的类;逻辑应放在 Service 或 Manager 层中,以保持 POJO 的纯粹性[^3]。 POJO 的应用提升了软件的可维护性和灵活性,是现代 Java 开发的核心实践之一。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值