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


当前回答

您已经看到了上面的形式定义。

但不要太纠结于定义。 让我们来看看这里的意义。

JavaBeans are used in Enterprise Java applications, where users frequently access data and/or application code remotely, i.e. from a server (via web or private network) via a network. The data involved must therefore be streamed in serial format into or out of the users' computers - hence the need for Java EE objects to implement the interface Serializable. This much of a JavaBean's nature is no different to Java SE application objects whose data is read in from, or written out to, a file system. Using Java classes reliably over a network from a range of user machine/OS combinations also demands the adoption of conventions for their handling. Hence the requirement for implementing these classes as public, with private attributes, a no-argument constructor and standardised getters and setters.

Java EE应用程序还将使用作为javabean实现的类以外的类。它们可以用于处理输入数据或组织输出数据,但不能用于通过网络传输的对象。因此,上面的注意事项不需要应用于它们,除非它们是有效的Java对象。后面这些类被称为pojo——普通旧Java对象。

总而言之,您可以将Java bean视为适合在网络上使用的Java对象。

自1995年以来,软件世界中充斥着大量的炒作——其中不乏欺骗。

其他回答

您已经看到了上面的形式定义。

但不要太纠结于定义。 让我们来看看这里的意义。

JavaBeans are used in Enterprise Java applications, where users frequently access data and/or application code remotely, i.e. from a server (via web or private network) via a network. The data involved must therefore be streamed in serial format into or out of the users' computers - hence the need for Java EE objects to implement the interface Serializable. This much of a JavaBean's nature is no different to Java SE application objects whose data is read in from, or written out to, a file system. Using Java classes reliably over a network from a range of user machine/OS combinations also demands the adoption of conventions for their handling. Hence the requirement for implementing these classes as public, with private attributes, a no-argument constructor and standardised getters and setters.

Java EE应用程序还将使用作为javabean实现的类以外的类。它们可以用于处理输入数据或组织输出数据,但不能用于通过网络传输的对象。因此,上面的注意事项不需要应用于它们,除非它们是有效的Java对象。后面这些类被称为pojo——普通旧Java对象。

总而言之,您可以将Java bean视为适合在网络上使用的Java对象。

自1995年以来,软件世界中充斥着大量的炒作——其中不乏欺骗。

POJOS具有某些约定(getter/setter,公共无参数构造函数,私有变量),并且正在起作用(例如。用于按表单读取数据)是javabean。

JavaBean遵循某些约定。Getter/setter命名,具有公共默认构造函数,可序列化等。有关更多细节,请参阅JavaBeans公约。

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

普通的旧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语言的一部分,而不是技术/框架的一部分。这是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类。 在这种例外情况下,带有来自technology/framework的注释的类称为pojo类。

POJO:如果这个类可以在底层JDK中执行,而不需要任何外部第三方库的支持,那么它就被称为POJO

JavaBean:如果类只包含带有访问器(setter和getter)的属性,则称为JavaBean。JavaBean通常不包含任何业务逻辑,而是用于保存一些数据。

所有的爪哇人都是POJO,但并非所有POJO都是爪哇人