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

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

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

Serializable接口是什么意思?


当前回答

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

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

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

其他回答

要理解JavaBean,您需要注意以下几点:

JavaBean是概念性的东西,不能表示一类特定的东西

JavaBean是一种开发工具,可以在可重用软件组件的操作中可视化

JavaBean基于SunJavaBeans规范,可以是可重用的组件。它最大的特点是可重用性。

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

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

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

上面重复了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本身,仍然没有提及它。

如果您熟悉C/Golang,您从未听说过Cbean或Gobean,因为它们有struct关键字,开发人员可以轻松定义结构类型,而无需编写复杂的OOP关键字。

type User struct {
  Name string
  Age int
}

var user User

user.Name = "name"
user.Age = 18

var bytes, err = json.Marshal(user)

缺少结构类型是Java的错误,开发人员发现了这种严重的不足。

然后,JavaBean被发明为另一个无聊的规则,让类假装结构,让你的编辑器或编译器不会因为你对类成员的不安全访问而哭泣或大叫。

Spring@Bean注释表示一个方法生成一个由Spring容器管理的Bean。

更多参考:https://www.concretepage.com/spring-5/spring-bean-annotation