我不确定有什么区别。我正在使用Hibernate,在某些书中,它们使用JavaBean和POJO作为可互换术语。我想知道是否有区别,不仅在Hibernate上下文中,而且在一般概念上。
我不确定有什么区别。我正在使用Hibernate,在某些书中,它们使用JavaBean和POJO作为可互换术语。我想知道是否有区别,不仅在Hibernate上下文中,而且在一般概念上。
Answers:
JavaBean遵循某些约定。Getter / setter命名,具有公共默认构造函数,可序列化等。有关更多详细信息,请参见JavaBeans Conventions。
没有严格定义POJO(普通Java对象)。它是一个Java对象,不需要实现特定的接口或从特定的基类派生,也不需要使用特定的注释才能与给定的框架兼容,并且可以是任意对象(通常相对简单) Java对象。
所有JavaBeans都是POJO,但并非所有POJO都是JavaBean。
JavaBean是满足某些编程约定的Java对象:
Serializable
。
根据Martin Fowler的说法,POJO是一个封装业务逻辑的对象,而Bean(除了在其他答案中已经提到的定义除外)仅是一个用于保存数据的容器,而对象上可用的操作仅是设置和获取数据。
这个词是在Rebecca Parsons,Josh MacKenzie和我在2000年9月的一次会议上准备演讲时创造的。在演讲中,我们指出了将业务逻辑编码为常规Java对象而不是使用Entity Beans的许多好处。我们想知道为什么人们反对在他们的系统中使用常规对象,并得出结论,这是因为简单的对象缺少花哨的名称。因此,我们给了他们一个,非常受欢迎。
Pojo-普通的旧Java对象
pojo类是没有任何专业的普通类,与技术/框架完全松散耦合。该类不是从技术/框架实现的,也不是从技术/框架api扩展而来,该类称为pojo类。
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语言的一部分,而不是technology / framework.so的一部分。所以这是pojo类。
5,
class ABC extends Thread{
--
}
这里线程也是Java语言的类,所以这也是pojo类。
6。
class ABC extends Test{
--
}
如果Test类是从技术/框架扩展或实现的,则ABC也不是pojo类,因为它继承了Test类的属性。如果Test类不是pojo类,那么ABC类也不是pojo类。
7。
现在这是一个例外情况
@Entity
class ABC{
--
}
@Entity
是由hibernate api或jpa api给定的注释,但仍然可以将此类称为pojo类。在这种特殊情况下,带有技术/框架给出的注释的类称为pojo类。
POJOS
具有某些约定(getter / setter,public no-arg构造函数,私有变量)并且正在起作用(例如,用于通过表格读取数据)JAVABEANS
。
总结:异同是:
java beans: Pojo:
-must extends serializable -no need to extends or implement.
or externalizable.
-must have public class . - must have public class
-must have private instance variables. -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor. - can have constructor with agruments.
所有Java Bean都是POJO,但并非所有POJO都是JAVA Bean。
您已经看到了上面的正式定义,尽管它们都是值得的。
但是不要太迷恋定义。让我们只看一下这里的事物感觉。
JavaBean用于企业Java应用程序中,其中用户经常通过网络从服务器(通过Web或专用网络)远程访问数据和/或应用程序代码。因此,所涉及的数据必须以串行格式流入或流出用户的计算机-因此需要Java EE对象来实现接口Serializable。JavaBean的这种本质与Java SE应用程序对象没有什么不同,Java SE应用程序对象的数据是从文件系统中读取或写入的。通过一系列用户机器/ OS组合在网络上可靠地使用Java类也要求采用约定进行处理。因此,需要将这些类实现为具有私有属性的公共类,无参数构造函数以及标准化的getter和setter。
Java EE应用程序还将使用除已实现为JavaBeans的类之外的其他类。这些可以用于处理输入数据或组织输出数据,但不能用于通过网络传输的对象。因此,上面的考虑不必应用于它们,除非它们可以作为Java对象有效。后面这些类称为POJO-普通旧Java对象。
总而言之,您可以将Java Bean视为仅适用于网络使用的Java对象。
自1995年以来,在软件世界中出现了很多炒作,而且数量很少。