用通俗易懂的语言讲解JavaBeans是什么?

18
在我开始之前,我想让大家知道,我确实花了很长时间通过谷歌找到了许多关于JavaBeans的解释和定义。但即使如此,在阅读了数小时后,这个主题仍然似乎相当模糊。我知道我必须提出有助于社区改进的问题,但这个问题只是为了看看我是否清楚了解JavaBeans。
从我所理解的内容来看,JavaBean基本上就像任何其他Java类一样,但遵循特定的约定,即:
- 类必须实现Serializeable接口 - 假定类属性为private并且名称以小写字母开头 - 每个属性必须具有相应的getter和setter方法。 - 每个setter方法以前缀'get'开头,后跟属性名称,例如setName() - setter方法是public和void类型 - getter方法也是如此(前缀'get'、public、返回类型对应的属性类别等) - 对于布尔属性,使用前缀“is”而不是“get” - 严格来说,被认为是“bean”的是类的实例,而不是类本身。
经过漫长的阅读,以上就是我的理解……这是吗?我接近了吗?还是我完全错了?
……感谢所有人的答案,使我能够更新这个项目列表 :-)

相关:https://dev59.com/EXI-5IYBdhLWcg3wsKl4 - assylias
关于布尔属性的getter,您犯了一个错误:您写成了“set”而不是“is”。 - Autar
4个回答

10

JavaBean是一个标准。所有的JavaBeans都具备以下3个特点:

1) 该类实现了Serializable接口。
2) 所有字段都有公共的setter和getter方法来控制访问。
3) 公共的无参构造方法。


6
我认为可序列化并不是必需的。 - assylias
我认为遵守标准是必要的,但在实践中并不一定在所有情况下都是必要的。 - hvgotcodes
@assylias 我不确定。但在Android中,对于Java Bean来说,SerializableParcelable至少对我很重要。只有实现其中之一,数据才能在活动/服务之间传输... - SheIs_LeThiCongNhan
标准似乎根本没有定义Java Bean,尽管它声称自己有。非常困惑。似乎没有任何强制要求的元素。实际上,Java Bean可以是一个序列化文件,而不是一个类。 - Tom Hawtin - tackline

3

没错,那就是它。

还有一些额外的细节:

  • Getter不需要参数,setter需要一个与属性相同类型的单个参数
  • 通过省略setter或getter可以将属性设置为只读或只写
  • boolean getter使用前缀“is”

严格来说,是实例被称为“bean”,而不是类。


2

那就是这样吗?我接近了吗?

是的,您相对正确。大多数bean都遵循这些基本定义规则。但是还有一些要补充的内容。为了区分bean和POJO(Plain Old Java Object),bean具有默认构造函数,并通常实现可序列化接口。

这使您可以在许多框架中使用基本模型。Bean主要用于在简单的布局结构中存储和检索数据,以便数据模型可以在特定体系结构中共享。例如,在UI中触发事件时,使用相同的数据来处理不同的对话框或检索给定ORM(对象关系映射)的结果。您可能还想查看的其他示例包括DTO(数据传输对象),VO(值对象)和EJB(企业Java Bean)。


0

补充我们同事的答案:

  1. 使用addXXXListener方法添加监听器。
  2. 使用removeXXXListener方法删除监听器。
  3. 布尔(原始)字段应该有一个isXXX方法而不是getXXX方法。

由于许多Java库和技术都会在幕后使用它,因此遵循这个标准非常重要。例如:JSP中的表达式语言、GUI构建器等。

规范:http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/


它们不是必需的,但如果你必须使用,你应该遵循标准。至少我在五年前获得SCJP时学习了它。请看:http://www.oracle.com/technetwork/java/javase/documentation/javabeans-getlisteners-192680.html - davidbuzatto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接