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


当前回答

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

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. http://www.martinfowler.com/bliki/POJO.html

其他回答

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类。

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

所有的javabean都是pojo,但并非所有的pojo都是javabean。

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

JavaBean类必须实现Serializable或Externalizable; JavaBean类必须有一个公共的无参数构造函数; 所有JavaBean属性必须有公共setter和getter方法(视情况而定); 所有JavaBean实例变量都应该是私有的。

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

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

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