JavaBean和BeanInfo的关系,它们有关系吗?

JavaBean和BeanInfo的关系,它们有关系吗?,java,javabeans,pojo,beaninfo,Java,Javabeans,Pojo,Beaninfo,JavaBean和Java之间有关系吗?我阅读了各种帖子/问题,并提到了关于JavaBean的一个普通类,它遵循一些规则(私有数据成员、getters()、setters()、implements interface…) 我正在翻阅《Java完整参考,第8版》一书,在“JavaBeans”一章中遇到了BeanInfo。JavaBean与BeanInfo有什么关系 尽管我试图在各种帖子上找到答案,但我仍然无法完全理解Java bean是如何有用的,一个类遵循一些规则(从而使它成为bean)如何使它

JavaBean和Java之间有关系吗?我阅读了各种帖子/问题,并提到了关于JavaBean的一个普通类,它遵循一些规则(私有数据成员、getters()、setters()、implements interface…)

我正在翻阅《Java完整参考,第8版》一书,在“JavaBeans”一章中遇到了BeanInfo。JavaBean与BeanInfo有什么关系

尽管我试图在各种帖子上找到答案,但我仍然无法完全理解Java bean是如何有用的,一个类遵循一些规则(从而使它成为bean)如何使它变得有用,而普通Java类却无法做到这一点?

tl;博士
  • 隐含的
    • getter/setter方法命名约定在类被视为一个类时隐式标识属性
  • 明确的
    • 或者,您可以通过定义实现接口的合作伙伴类来明确标识这些属性
    • 在Java 9和更高版本中,您可以使用来更方便地实现
      BeanInfo
细节 最初的意思是“一个可重用的软件组件,可以在构建工具中进行可视化操作”,例如拖放表单构建工具。那从来没有真正起过作用

相反,人们通常使用JavaBeans方法作为识别属性的方法。例如,7中的

JavaBean至少必须:

  • 有一个
  • 让getter/setter方法()与命名约定匹配
您可以隐式或显式地定义JavaBean

JavaBean命名约定 定义JavaBean的隐式方法是通过命名约定。任何以
get
set
is
开头的方法都会被/检测到,并被视为识别属性。虚属性可能由类上的成员变量支持,也可能不是

如果一个
Person
类有
getEyeColor
setEyeColor
方法,那么作为一个JavaBean,我们会看到一个读写“eyeColor”属性。没有setter的getter使属性为只读

BeanInfo
接口 定义JavaBean的显式方法是在您想要的JavaBean类旁边创建另一个类。另一个类实现该接口。很可能另一个类实际上是
simpleBeanifo
类的子类。该
SimpleBeanInfo
类以否定的方式实现
BeanInfo
接口,拒绝信息。您可以重写要标识JavaBean类方面的信息片段的方法

您可以使用
BeanInfo
partner类来标识属性(而不是使用getter/setter命名约定)。您可以识别JavaBean的其他方面。许多其他方面已经过时,因为它们与JavaBean有关,JavaBean是一个出现在IDE表单构建工具中的小部件,但是您可能仍然会发现一些方面很有用

Java中的反射/内省功能自动检测和处理BeanInfo类,以提供有关JavaBean类的元数据

BeanInfo注释 可能对JavaBean的某些方面有所帮助:。我还不明白它们的正确用法。我又问了一个问题。我曾希望这将允许将成员变量注释为属性,以避免编写空的getter/setter方法,但显然这个JEP没有提供这个特性(我不完全确定)

关于这个项目,请参见

JavaBeans规范 JavaBeans不仅仅是像“eyeColor”这样的属性,还有更多的内容,尽管属性肯定是使用JavaBeans最常见的用途

我建议学习可读性很强的课程。然后读这本书

关于技术概述,我建议阅读斯蒂芬·科尔伯恩的这篇文章

Bean验证 另一方面,该标准正在成为一种流行的方式,用于声明和强制执行对象中数据值条件的业务规则。例如,规则可能是“眼睛颜色是必填字段,不得为null或空字符串”或“发票总额必须为零或正,不得为负数”

已经有(1.0、1.1in和in)和各种实现。Bean验证可以在客户端(Swing、JavaFX等)或服务器端使用,例如,它支持自己的数据输入验证技术以及Bean验证实现

企业JavaBeans 不要把JavaBeans与Java混为一谈。重新使用EJB的“JavaBean”商标是Sun营销人员的一个糟糕决定。EJB完全没有连接,与原始JavaBeans不同

记录 如果您想要的是一种在Java对象中将结构化数据表示为属性的简单方法,请查看Java14中预览的新记录功能。看

记录为声明类提供了紧凑的语法,这些类是浅不可变数据的透明持有者


由Oracle免费阅读。@BasilBourque:谢谢你的指点。感谢如果你想了解所有细节,它非常容易阅读。虽然JavaBean最初是“一个可重用的软件组件,可以在构建工具中进行可视化操作”,但JavaBean的使用方式不同于表单构建。例如,作为一个方便的数据容器,顺便说一句,不要与(EJB)混淆。技术上无关。第一种方法易于理解,具有简单的实际应用。第二个…嗯,没那么多。EJB是另一头野兽,它的名字是由在Java技术早期试图利用JavaBeans最初的流行和声誉的营销人员命名的。