JavaBean和POJO有什么区别?

我不确定差异。 我使用Hibernate,在某些书中,它们使用JavaBean和POJO作为可互换的术语。 我想知道是否有区别,不仅仅是在Hibernate上下文中,而是作为一般的概念。

JavaBean遵循某些约定。 Getter / setter命名,具有公共的默认构造函数,可串行化等。有关更多详细信息,请参阅JavaBean约定 。

POJO(普通旧Java对象)没有严格定义。 这是一个Java对象,它不需要实现特定的接口或从特定的基类派生,或使用特定的注释来与给定的框架兼容,并且可以是任意的(通常相对简单的) Java对象。

所有的JavaBean都是POJO,但并不是所有的POJO都是JavaBean。

JavaBean是满足某些编程约定的Java对象:

  • JavaBean类必须实现Serializable或Externalizable;
  • JavaBean类必须有一个公共的无参数构造函数;
  • 所有的JavaBean属性都必须有公共的setter和getter方法(适当的时候);
  • 所有的JavaBean实例variables都应该是私有的。

根据Martin Fowler的说法,POJO是封装业务逻辑的一个对象,而Bean(除了其他答案中已经定义的定义之外)不过是一个容纳数据的容器,而对象上的操作只是设置和获取数据。

这个词是在Rebecca Parsons,Josh MacKenzie和我准备在2000年9月召开的一次会议上准备讨论的时候创造的。在谈话中,我们指出了将业务逻辑编码为普通Java对象而不是使用Entity Beans的许多好处。 我们想知道为什么人们在他们的系统中使用常规物体是如此的反对,并得出结论,那是因为简单的物体缺乏一个奇特的名字。 所以我们给了他们一个,而且很好的。

http://www.martinfowler.com/bliki/POJO.html

POJO:如果类可以用底层的JDK执行,不需要任何其他外部的第三方库支持,那么它的POJO就叫做POJO

JavaBean:如果类只包含具有访问器(setter和getter)的属性,那么这些属性被称为javabeans.Java beans通常不会包含任何业务逻辑,而是用于保存某些数据。

所有的JavaBeans都是POJO,但是所有的POJO都不是JavaBean

有一些约定的POJOS (getter / setter,public no-arg构造函数,私有variables)并且正在使用(例如用于按窗体读取数据)是JAVABEANS

Pojo – 朴素的旧java对象

pojo类是一个没有任何特色的普通类,从技术/框架完全松散耦合的类。类没有从技术/框架实现,也没有从类被称为pojo类的技术/框架api中扩展。

pojo类可以实现接口和扩展类,但超类或接口不应该是一个技术/框架。

例子 :

1。

 class ABC{ ---- } 

ABC类没有实施或从技术/框架延伸,这就是为什么这是pojo类。

2。

 class ABC extends HttpServlet{ --- } 

从servlet技术api扩展的ABC类,这就是为什么这不是pojo类。

3。

 class ABC implements java.rmi.Remote{ ---- } 

ABC类从rmi api实现,这就是为什么这不是pojo类。

4。

 class ABC implements java.io.Serializable{ --- } 

这个接口是java语言的一部分,不是技术/框架的一部分,所以这是pojo类。

5。

 class ABC extends Thread{ -- } 

这里的线程也是java语言的类,所以这也是pojo类。

6。

 class ABC extends Test{ -- } 

如果Test类从技术/框架扩展或实现,则ABC也不是pojo类,因为它inheritance了Test类的属性。 如果Test类不是pojo类,那么ABC类也不是pojo类。

7。

现在这一点是一个例外情况

 @Entity class ABC{ -- } 

@Entity是由hibernate api或jpa api给出的注释,但是我们仍然可以将这个类作为pojo类来调用。 由技术/框架给出的注释类被这种特殊情况称为pojo类。