当前位置: 首页 > 知识库问答 >
问题:

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

左丘涵畅
2023-03-14

JavaBean和BeanInfo之间有什么关系吗?我阅读了各种帖子/问题,以及关于JavaBean的内容。有人提到,Bean是一个遵循某些规则的常规类(私有数据成员、getter()、setters()、实现Serializabe接口……)。

我正在翻阅《Java完全参考,第8版》一书,在“Java豆子”一章中遇到了豆子信息。Java豆子和豆子信息有什么关系?

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

共有1个答案

俞衡虑
2023-03-14
  • 含蓄的
    • 当类被认为是JavaBean时,getter/setter方法命名约定隐式地标识属性
    • 或者,您可以通过定义实现BeanInfo接口的合作伙伴类来明确标识这些属性

    JavaBeans规范最初的目的是“一个可重用的软件组件,可以在构建工具中进行可视化操作”,比如拖放IDE表单构建工具。这从来没有真正起过作用。

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

    JavaBean至少必须:

    • 可序列化
    • 有一个no-args构造函数
    • 让getter/setter方法(突变体)匹配命名约定

    您可以隐式或显式地定义JavaBean。

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

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

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

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

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

    请参见Oracle教程页面。

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

    请参见关于OpenJDK项目的JEP 256: BeanInfo注释。

    JavaBean不仅仅是像“眼色”这样的属性,尽管属性肯定是使用JavaBean最常见的目的。

    我建议学习非常易读的JavaBeans 1.01规范。并阅读甲骨文教程。

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

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

    该标准有三个版本(JSR 349中的1.0、1.1、,

    不要将JavaBeans和Enterprise JavaBeans(EJB)混淆。Sun的营销人员为EJB重新使用JavaBean商标是一个糟糕的决定。EJB与最初的JavaBeans完全没有联系,并且不同。

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

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

 类似资料:
  • 问题内容: 我知道Hibernate实现了ORM(对象关系映射),JDBC实现了哪种类型的映射?它实现了DAO吗?我不完全了解DAO如何与JDBC相关…? 问题答案: DAO不是映射。DAO代表数据访问对象。看起来像这样: 对于DAO,JDBC只是实现细节。 hibernate可能是另一个。 JPA 可能 是另一个(如果您要将现有的旧版应用程序迁移到JPA;对于新应用程序,这有点奇怪,因为JPA本

  • 继承和复合都提倡建立与现有的类有许多共性的新类来实现软件复用。还有其他一些方法可以利用类所提供的服务。尽管人不是一辆汽车,人也不能包含汽车,但人当然可以使用汽车。一个函数可以简单地向对象发出函数调用来使用这个对象。 一个对象可以知道另外一个对象,知识网中常常存在这种关系。一个对象可以包含指向对象的指针或对该对象的引用,从而知道那个对象的存在。在这种情况下,可以说一个对象和另一个对象具有知道关系。

  • 本文向大家介绍C#和.Net的关系。相关面试题,主要包含被问及C#和.Net的关系。时的应答技巧和注意事项,需要的朋友参考一下 C#只是抽象的语言,可以把C#编译生成Java平台的二进制代码,也可以把Java代码编译生成.Net平台的二进制代码。所以C#只是提供了if、while、+-*/、定义类、int、string等基础的语法,而Convert.ToInt32、FileStream、SqlCo

  • DOM 与 JavaScript 是分离的。 DOM 有自己的一套标准,JavaScript 也有自己的一套标准。 JavaScript 是对标准的实现,为一种语言,而 DOM 标准定义了一系列的接口,由此可以看出,他们两者是可以毫不相干的。 但是在 Web 开发中,页面内容的展示全部通过浏览器解析展现,JavaScript 想动态的修改页面,就必须由浏览器提供一些方法,交给开发者来操作页面上的元

  • 问题内容: 我是JAVA的新手,刚刚开始学习IS-A和HAS-A的关系,但学到的东西不多。我想想像一下这两者有何不同以及何时应使用IS-A和HAS-A? 问题答案: IS-A关系是继承。继承的类称为子类或子类。另一方面,HAS-A关系是组成。 在OOP中,IS-A关系是完全继承。这意味着子类是父类的一种。例如,苹果是水果。因此,您将扩展水果以获得苹果。 另一方面,组合意味着创建引用了其他对象的实例

  • 问题内容: 我有文章清单。 那些文章是通过使用插入的,效果很好。 现在,每篇文章都有一个authorId,不应保留它。而是我想找到存储的作者RealmObject并为文章设置其关系。 某种程度上,这似乎并不是领域所坚持的。 这同样适用于图像RealmObject,只是我在保存之前进行了迭代。 这是完整的代码段。 如果您需要更多信息,请告诉我。 谢谢。 问题答案: 来自Realm的基督徒。您将继续操