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的许多好处。 我们想知道为什么人们在他们的系统中使用常规物体是如此的反对,并得出结论,那是因为简单的物体缺乏一个奇特的名字。 所以我们给了他们一个,而且很好的。
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类。