我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?

此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?

基本上,为什么有一个术语?

Serializable接口是什么意思?


当前回答

JavaBean是一个Java类(概念性),应该遵循以下约定:

它应该有一个无参数构造函数。它应该是可序列化的。它应该提供设置和获取财产值的方法,称为getter和setter方法。

它是一个可重用的软件组件。它可以将多个对象封装到一个对象中,以便可以从多个位置访问同一个对象,这是代码易于维护的一步。

其他回答

JavaBean只是一个标准。它是一个常规的Java类,但它遵循某些约定:

所有财产都是私有的(使用getters/setter)公共无参数构造函数实现可序列化。

就是这样,这只是一个惯例。但许多图书馆都依赖它。

关于Serializable,请参阅API文档:

类的可序列化性由实现java.io.Serializable接口。不实现此功能的类接口将不会序列化或反序列化它们的任何状态。可序列化类的所有子类型本身都是可序列化的。这个序列化接口没有方法或字段,仅用于识别可序列化的语义。

换言之,可序列化对象可以写入流,因此可以写入文件、对象数据库等。

此外,JavaBean和另一个类之间没有语法差异——如果一个类遵循标准,那么它就是JavaBean。

这是一个术语,因为该标准允许库以编程方式处理您以预定义方式定义的类实例。例如,如果一个库想要流式传输您传递给它的任何对象,它知道可以这样做,因为您的对象是可序列化的(假设库要求您的对象为正确的JavaBeans)。

它们是可序列化的,具有零参数构造函数,并允许使用getter和setter方法访问财产。命名“Bean”是为了包含这个标准,它旨在为Java创建可重用的软件组件。根据维基百科。

构成应用程序主干并由SpringIoC容器管理的对象称为bean。bean是由Spring IoC容器实例化、组装和管理的对象。否则,bean只是应用程序中许多对象中的一个。根据Spring IoC。

上面重复了6或7次,说明JavaBeans没有参数构造函数要求。

这是错误的,没有这样的要求,特别是在JavaSpring的上下文中。

描述JavaBeans API的规范版本(1.01)中也没有提到这一要求(https://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/). 此外,本规范在以下上下文中仅2次提到“null构造函数”:“每个自定义程序都应有一个空构造函数。”“每个PropertyEditor都应有一个空构造函数。”

因此,该规范的作者似乎不知道或不愿意使用“空构造函数”这一术语,对于JavaBeans本身,仍然没有提及它。

POJO(普通的旧Java对象):POJO是普通的Java对象,除了Java语言强制的限制外,没有其他限制。

序列化:用于保存对象的状态并通过网络发送。它将对象的状态转换为字节流。我们可以通过称为反序列化的过程从字节流中重新创建Java对象。

使类实现java.io.Serializable接口。并使用ObjectOutputStream类的writeObject()方法实现序列化。

JavaBean类:它是一个特殊的POJO,有一些限制(或约定)。

实现序列化具有公共无参数构造函数所有财产都是私有的,使用公共getters和setter方法。

许多框架(如Spring)使用JavaBean对象。

JavaBeans是一种标准,其基本语法要求已由其他答案明确解释。

然而,IMO,它不仅仅是一个简单的语法标准。JavaBeans的真正含义或预期用途是,与围绕标准的各种工具支持一起,促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构建应用程序,而无需编写任何代码(或只需编写少量粘合代码)。不幸的是,这项技术被业界低估和利用不足,从本主题的答案中可以看出这一点。

如果您阅读Oracle的JavaBeans教程,您可以更好地理解这一点。