究竟什么是POJO?

究竟什么是POJO?     POJO(PlainOldJavaObject)这种叫法是MartinFowler、RebeccaParsons和JoshMacKenzie在2000年的一次演讲的时候提出来的。     我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring2初学者实践教材》)的时候发现POJO这个概念无法回避。现在网上对于

大家好,又见面了,我是你们的朋友全栈君。      POJOPlain Old Java Object
)这种叫法
Martin Fowler

Rebecca Parsons

Josh MacKenzie

2000
年的一次演讲的时候提出来的。


      我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring2初学者实践教材》)的时候发现POJO这个概念无法回避。现在网上对于POJO的解释很多,但是很多都是有错误的或者不够准确。对此我一开始也是存在误区的,我原来是这样理解的:

        POJO是这样的一种“纯粹的”JavaBean,在它里面除了JavaBean规范的方法和属性没有别的东西,即private属性以及对这个属性方法的publicgetset方法。我们会发现这样的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框架的类或接口。
   




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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140334.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 架构设计&分布式&数据结构与算法面试题(2020最新版)「建议收藏」

    架构设计&分布式&数据结构与算法面试题(2020最新版)「建议收藏」文章目录架构设计请列举出在JDK中几个常用的设计模式?什么是设计模式?你是否在你的代码里面使用过任何设计模式?静态代理、JDK动态代理以及CGLIB动态代理静态代理动态代理cglib代理单例模式工厂模式观察者模式装饰器模式秒杀系统设计分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路:中心化和去中心化分布式与集群的区别是什么?CAP定理CAP…

    2022年5月31日
    30
  • python运算符优先级问题

    python运算符优先级问题指数最高 gt 按位反转 gt 乘 除取模 取整除 实际使用中 记住简单的规则就可以了 复杂的表达式一定要使用小括号组织乘除法优先加减位运算和算术运算 gt 比较运算 gt 赋值运算 gt 逻辑运算 操作 使用 python 表示数学式子 5 10x 5 13 y 1 a b x 9 5 x 12 x y

    2025年8月5日
    2
  • 《大话操作系统——做坚实的project实践派》(6)[通俗易懂]

    《大话操作系统——做坚实的project实践派》(6)

    2022年2月2日
    41
  • pycharm怎么配置python环境anaconda_ug编程电脑配置要求

    pycharm怎么配置python环境anaconda_ug编程电脑配置要求1.介绍Python:一种解释型、面向对象、动态数据类型的高级程序设计语言。PyCharm:一款好用的集成开发环境。Conda:Python环境管理器,方便我们管理和切换编程环境。2.下载2.1Conda下载Miniconda下载链接Anaconda下载链接Miniconda是Anaconda的压缩版,Miniconda只包含conda的核心内容,Anaconda中包含了Spyder集成开发环境等扩充内容。Miniconda的功能足矣。根据计算机的实际情况选择下载安装包,上图中Py

    2022年8月28日
    3
  • iOS逆向之深入解析如何计算+load方法的耗时「建议收藏」

    iOS逆向之深入解析如何计算+load方法的耗时「建议收藏」一、类方法+load在pre-main时期,objc会向dyld注册一个init回调:void_objc_init(void){staticboolinitialized=false;if(initialized)return;initialized=true;//fixmedeferinitializationuntilanobjc-usingimageisfound?environ_

    2022年10月18日
    3
  • 分布式文件存储选型比较[通俗易懂]

    分布式文件存储选型比较[通俗易懂]一、分布式文件存储的来源在这个数据爆炸的时代,产生的数据量不断地在攀升,从GB,TB,PB,ZB.挖掘其中数据的价值也是企业在不断地追求的终极目标。但是要想对海量的数据进行挖掘,首先要考虑的就是海量数据的存储问题,比如Tb量级的数据。谈到数据的存储,则不得不说的是磁盘的数据读写速度问题。早在上个世纪90年代初期,普通硬盘的可以存储的容量大概是1G左右,硬盘的读取速度大概为4.4MB/s.读取一张硬盘大概需要5分钟时间,但是如今硬盘的容量都在1TB左右了,相比扩展了近千倍。但是硬盘的读取速度大概是10

    2022年6月10日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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