POJO简介

POJO简介POJO 一:什么是POJOPOJO的名称有多种,pureoldjavaobject、plainordinaryjavaobject等。按照MartinFowler的解释是“PlainOldJavaObject”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框…

大家好,又见面了,我是你们的朋友全栈君。

POJO
 一:什么是POJO
POJO的名称有多种,pure old java object 、plain ordinary java object 等。

按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。


POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

二:为什么会有POJO?
主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。

三:POJO的意义
POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。

 

四:POJO与PO、VO的区别
POJO是指简单java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object)。
PO是指持久对象(persistant object持久对象)。
VO是指值对象或者View对象(Value Object、View Object)。注意,本文的VO特指View Object。
持久对象实际上必须对应数据库中的entity,所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。
由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。

 

五:POJO的扩展
POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
但是在POJO的基础上,能够扩展出不同的对象。
为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
POJO还可以当作DTO使用。

 
Javabean,POJO,PO,VO,DTO
 

javabean:
    在Java程序或JSP程序中,其实有很多的代码段是可以重复使用的,比如对数据库的操作、用户的有效性检查及某些项特定功能的实现等。为了很好的解决这个问题,提高开发效率,Sun公司推出了JavaBean,简言之,JavaBean这是一个实现了某个功能且供重复使用的Java类。

    在JSP中使用JavaBean后,可实现HTML与Java代码的分离,使JSP更易于开发和维护。因此JavaBean成了JSP程序员的必备利器之一。

     虽然JavaBean是Java类,同时它也具有自己的一些特征:

      1、 JavaBean是一个public的类

      2、 JavaBean有一个不带参数的构造方法

      3、 JavaBean中的属性通过getXXX()和setXXX()进行操作

按着Sun公司的定义,JavaBean是一个可重复使用的软件组件。实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于

javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:
  1. 可以实现代码的重复利用
  2. 易编写、易维护、易使用
  3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译。

比如我们编写一个计算圆面积的java类CircleArea.java  以后需要计算圆面积的地方直接调用就行了。
—————–
来自百度对POJO的解释:

  简单的Java对象(Plain Ordinary Java Objects)实际就是普通JavaBean,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。

其它的解释:
POJO -Plain Old Java Objects ,即"普通的老旧的Java对象".

  该名称的创立者之一Matin Flower是这样解释的: "对于人们经常忘记常规的Java对象,我的总结是它们没有一个好名字 – 因此在准备一次演讲时,Rebecca Parsons, Josh Mackenzie 和我给起了名字: POJO。"

  POJO是不包含业务逻辑的透明组件,就像其命名那样,它的确简单,只用作单纯的DTO(Data Transport Object 数据传输对象)或是VO(Value Object 值对象).它通常的构成形式为一个包含私有变量作为属性以及访问其属性的getter和setter方法的类,根据需要可以为其添加constructor.对于初识POJO的人来说,它很像JavaBean,但按照其应与其他组件易组合的设计目的,它不应包含业务逻辑的处理,这也是与JavaBean不同的地方。

PO -Persistent Object ,即"持久化对象".

PO是位于EIMS层数据库中的实体,生命周期和数据库密切相关.在向数据库插入记录时创建该实体,删除或关闭数据库时该实体随之消亡.很多优秀的开源框架都实现了将数据库中的PO通过ORM用POJO来实际操作,如Hibernate,JDO等。

最后我们总结一下:

1.VO/DTO 就是Value Object和Data Transform object就是作为数据使用的对象

2.POJO,是Plain Ordinary(Old)Java Object的缩写,是不包含业务逻辑的JavaBean,通常情况下可以作为VO/DTO来使用

3.PO,是Persistence Object的缩写,来自各种各个JPA ORM(Java Persistent API Object Relational Mapping)提供商比如Hibernate toplink等厂商,是跟数据库交互的时候存在的中间对象,而且可以有各种逻辑操作。
pojo与实体bean:
pojo 应用于页面数据的操作,是来保存数据的。(你也可以不这样做,但是这已经成了一种规范。)

实体bean与数据库表关联,是对数据表的操作。

其它:

POJO和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多,JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子 扳、锤、撬等等),而这个扳子就是一个组件。

先解释上面的意思:

pojo的格式是用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。
而javabean虽然数据的获取与pojo一样,但是javabean当中可以有其它的方法。


 
Pojo和JavaBean的区别
 

POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象。
2005年11月时,“POJO”主要用来指代那些没用遵从特定的Java对象模型,约定或框架如EJB的Java对象.
理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)。例如一个POJO不应该是
  1. 扩展预定的类,如       public class Foo extends javax.servlet.http.HttpServlet { …
  2. 实现预定的接口,如   public class Bar implements javax.ejb.EntityBean { …
  3. 包含预定的标注,如   @javax.ejb.Entity public class Baz{ …
然后,因为技术上的困难及其他原因,许多兼容POJO风格的软件产品或框架事实上仍然要求使用预定的标注,譬如用于更方便的持久化。

JavaBean 是一种JAVA语言写成的可重用组件。它的方法命名,构造及行为必须符合特定的约定:
  1. 这个类必须有一个公共的缺省构造函数。
  2. 这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。
  3. 这个类应是可序列化的。 
因为这些要求主要是靠约定而不是靠实现接口,所以许多开发者把JavaBean看作遵从特定命名约定的POJO。

简而言之,当一个Pojo可序列化,有一个无参的构造函数,使用getter和setter方法来访问属性时,他就是一个JavaBean。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140309.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 子网划分和计算方法(附习题详解)

    子网划分和计算方法(附习题详解)一.子网划分作用1.计算网络号,通过网络号选择正确的网络设备连接终端设备1)清楚IP地址四点段点分十进制数和子网掩码,对应的网络号是什么2)交换机是用来连接相同网络的设备,路由器是用来连接不同网段的设备网络号一样的,即在相同网段,网络号不一样的,即不同网段3)计算方法把十进制数的IP地址换算成二进制数,把子网掩码也由十进制数换算成二进制数,两对二进制数对齐做“与”运算,即可得出网络号。2.根据网络的规模,可以对局域网(内网)进行网络地址规划二.IP地址格…

  • LoadRunner教程01:性能测试常见用语

    LoadRunner教程01:性能测试常见用语1、并发用户数量:常见的错误理解:使用系统的全部用户数量使用系统的全部在线用户数量正确理解:与服务器进行交互的在线用户数量2、请求响应时间:从client发出请求到得到响应的整个时间,一般包括网络响应时间+server的响应时间3、事务请求响应时间:完成这个事务所用的时间,这个是性能测试中重点关注的指标4、吞吐率:单位时间在网络上传输的数据量(从服务端返

  • 抗渗等级p6是什么意思_混凝土p6是什么意思「建议收藏」

    抗渗等级p6是什么意思_混凝土p6是什么意思「建议收藏」展开全部40是混凝土的强度等62616964757a686964616fe58685e5aeb931333431356664级,P6是抗渗混凝土按抗渗压力。抗渗混凝土按抗渗压力不同分为P6、P8、P10、P12和大于P12共5个等级。抗渗混凝土通过提高混凝土的密实度,改善孔隙结构,从而减少渗透通道,提高抗渗性。混凝土按标准抗压强度(以边长为150mm的立方体为标准试件,在标准养护条件下养护28天,…

  • 【转载】图说OOP基础(一)

    【转载】图说OOP基础(一)

    2021年11月20日
  • 解决微信小程序errcode:40029[通俗易懂]

    解决微信小程序errcode:40029[通俗易懂]第一次接触微信小程序,喜提errcode:40029errmsg:”invalidcode,hints:[req_id:6HfBbZyFe-8y]场景:写完接口之后前端联调一直500,最后发现是获取的时候微信报错了。解决办法:导入项目的时候appid要填入你请求session_key的appid,如图所示(我这个开发者工具是旧版的)还有一种解决方法是其他文章找…

  • STM32标准库移植RT-Thread Nano添加FinSH与控制台[通俗易懂]

    STM32标准库移植RT-Thread Nano添加FinSH与控制台[通俗易懂]添加过shell后首先要在rtconfig.h中定义#defineRT_USING_FINSH为了方便,串口相关函数添加在board.c中使用串口中断实现命令的接收/**Copyright(c)2006-2019,RT-ThreadDevelopmentTeam**SPDX-License-Identifier:Apache-2.0**ChangeLogs:*DateAuthorNotes*2017-0

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号