首页 > 其他分享 >究竟什么是POJO?

究竟什么是POJO?

时间:2022-11-09 10:38:58浏览次数:63  
标签:Java 什么 dao POJO objects Action JavaBean 究竟


POJO(Plain Old Java Object )这种叫法是 Martin Fowler 、 Rebecca Parsons 和 Josh MacKenzie 在 2000 年的一次演讲的时候提出来的。
      我在做J2EE培训中发现我的很多学生问我什么是POJO,后来我在写书(《Spring2初学者实践教材》和《Spring2初学者实践教材》)的时候发现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,什么,dao,POJO,objects,Action,JavaBean,究竟
From: https://blog.51cto.com/tonyguan/5835472

相关文章

  • 什么样的vue面试题答案才是面试官满意的
    Vue组件渲染和更新过程渲染组件时,会通过Vue.extend方法构建子组件的构造函数,并进行实例化。最终手动调用$mount()进行挂载。更新组件时会进行patchVnode流程,核心就......
  • 每日一题之Vue数据劫持原理是什么?
    什么是数据劫持?定义:数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。简单地说,就是当我们触发函数的时候动......
  • 【Javaweb】implements Serializable是什么意思?反序列化是什么意思?
    为了保证数据传输的可靠性,常常要implementsSerializable,为什么?对象本质上是虚无缥缈的,只是内存中的一个地址,如果想要让对象持久化,让对象在网络上传输,总不可能传送一个内......
  • 综述是什么 怎么写
    文献综述是在对某一特定学科或专题的文献进行收集、整理、分析与研究的基础上,撰写出的关于学科或某专题的文献报告,它对相关文献群进行分析研究,概括出该学科或专题的研究现......
  • 【javaweb】integer是什么意思?integer和int的区别
    1、数据类型不同:int是基础数据类型,而integer是包装数据类型2、默认值不同:int的默认值是0,而integer的默认值是null3、内存中存储的方式不同:int在内存中直接存储的是数据......
  • 问题!问题!问题是什么
    老师说写论文一切都围绕着问题展开那么问题是什么这个问题成立的条件:1.比别人有创新点,解决了别人之前没有解决到的问题,2.这个问题可以用这个方法解决。信道分配的问题是......
  • Servlet的生命周期; Java IO流处理 ; python有点意思; matlab; 为什么要使用构造方法?JavaB
    Servlet的生命周期Servlet的生命周期主要有三个方法:init()初始化阶段service()处理客户端请求阶段destroy()终止阶段pagehelper怎么使用的​​https://pagehelper.github.......
  • 什么是wxss ?
    是一套样式语言,类似于网页开发中的css ,用于美化网页; wxss与css区别1、wxss新增了rpx尺寸单位css中需要手动进行单位换算,如remwxss中的rpx会自动进行单位......
  • C#的Lock可以锁什么?
    为什么不锁值类型(object)123呢?为什么不锁字符串"123"呢?为什么不锁公共类型public呢?为什么不锁类型People.GetType()呢? 上边的都可以编译过去,但是锁的范围不同;锁存在......
  • 什么是wxml;
    wxml是小程序的标签语言,用来构建小程序页面的结构,类似于网页开发中的html; wxml与html区别  1、标签名称不同 html(div\ span \ img \a)wxml (v......