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框架的类或接口。
分享到:
相关推荐
【JAVA实现商品管理系统源代码】是一个关于使用Java编程语言开发的商品管理系统的核心代码文档。这个系统主要目的是管理和操作商品相关的数据,如库存、价格、销售等信息。以下是对系统中涉及的关键知识点的详细解释...
在IT行业中,薪资管理是企业运营的关键组成部分,尤其是在Java编程领域。Java作为一种广泛使用的编程语言,因其稳定性和可扩展性,常被用于开发复杂的薪资管理系统。本文将深入探讨薪资管理系统的概念、Java在其中的...
本篇文章将介绍如何利用Java 8 Streams来创建数据透视表,这是一种强大的数据分析工具,可以帮助我们揭示数据背后的模式和趋势。 1. **数据透视表的概念** 数据透视表是一种对数据进行汇总、分析和展示的方法,它...
java8 集合源码 git java jackson 字段动态过滤 Json 2 Pojo User-agent-utils 杂项 swagger 文档 java 8 Java8代码片段 反射工具 restful RESTful文档管理 api设计 JWT oauth2 PDF spring RequestMapping 使用...
Spring 框架⽬标是简化Java企业级应⽤开发,并通过POJO为基础的编程模型促进良好的编程习惯。 Spring是⼀个轻量级的IoC和AOP容器框架。是为Java应⽤程序提供基础性服务的⼀套框架,⽬的是⽤于简化企业应⽤程序的开发...
7. **系统架构**:项目采用MVC(Model-View-Controller)架构,模型层由Java POJO(Plain Old Java Object)对象构成,处理业务逻辑和数据操作;视图层由jsp页面负责展示,控制器层则由servlet协调模型和视图的交互...
3. **POJO(Plain Old Java Object)**: 在Hibernate中,POJO代表与数据库表对应的Java实体类,不包含任何特定的持久化逻辑。例如,`TUser` 类就是一个简单的POJO,包含属性(如`name`)和getter、setter方法。 4. ...
- **JPA (Java Persistence API)**:介绍了JPA的基本概念及其在MyEclipse中的实现方式,特别是第十二章新增的Struts2内容。 - **JSF (JavaServer Faces)**:一种构建用户界面的Java EE标准,本书讲解了JSF的使用方法...
java8 集合源码 git yujunhao8831 java jackson 字段动态过滤 Json 2 Pojo User-agent-utils 杂项 swagger 文档 java 8 反射工具 restful RESTful文档管理 api设计 JWT PDF spring RequestMapping 使用使用示例 ...
- **2.5.1 Java对象事件属性**:介绍如何定义和访问POJO事件的属性。 - **2.5.2 属性名称**:说明如何命名属性。 - **2.5.3 参数化类型**:解释如何使用泛型定义属性类型。 - **2.5.4 设置索引和映射属性的方法**:...
### Hibernate 3.2中文手册知识点汇总 #### 第1章:Hibernate入门 - **1.1 前言** - 介绍了Hibernate的基本概念及其重要性。 - 强调了学习Hibernate对于Java开发人员的重要性。 - **1.2 第一部分—第一个...
使用 JPA,开发人员可以将任何普通的旧式 Java 对象 (POJO) 指定为 JPA 实体。这意味着 JPA 实体可以是一个简单的 Java 类,该类的非临时字段(非静态且非瞬态字段)可以通过 JPA 持久性提供者的服务持久化到关系...
### Spring5.1中文参考指南知识点汇总 #### 一、Spring框架概述 - **Spring**:代表一个开源的Java平台框架,旨在简化企业级应用的开发。 - **历史背景**:Spring项目始于2002年,由Rod Johnson创建,自2004年发布...
- **表名**:每个表的用途及对应的数据对象(PO,可能是Java的Pojo类)。 - **列名**:列的英文和中文名称,以及它们的含义。 - **数据类型**:包括精度范围,如INT、VARCHAR(255)等,决定数据存储的格式和大小。...
它实现了`ActionForm`接口,因此在设计上并不被视为一个纯粹的POJO(Plain Old Java Object)。 3. **Action**:代表了具体的业务逻辑操作。当ActionServlet收到用户请求后,会根据配置信息决定调用哪个Action来...
从给定文件内容中,我们可以提炼出关于Spring_Batch的系列知识点,具体如下: Spring_Batch是一个轻量级的、面向Spring框架的批处理框架,它的核心目标是为企业级系统提供高性能的数据处理能力。它支持大量数据的...
- **聚合函数**:说明如何在 HQL 中使用聚合函数进行数据汇总。 - **多态查询**:讨论如何编写可以查询继承结构的 HQL。 - **where 子句**:解释如何在 HQL 中添加筛选条件。 - **表达式**:介绍 HQL 中可用的表达式...
3. **中文文档**:这个文件可能是整个 MyBatis 中文文档的汇总,覆盖了 MyBatis 的各个部分,从基本概念到高级特性,提供全面的学习资源。 综合以上信息,我们可以预期这份 MyBatis 中文版文档将包含以下几个主要...