我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?
此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?
基本上,为什么有一个术语?
Serializable接口是什么意思?
我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?
此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?
基本上,为什么有一个术语?
Serializable接口是什么意思?
当前回答
Spring@Bean注释表示一个方法生成一个由Spring容器管理的Bean。
更多参考:https://www.concretepage.com/spring-5/spring-bean-annotation
其他回答
JavaBean只是一个标准。它是一个常规的Java类,但它遵循某些约定:
所有财产都是私有的(使用getters/setter)公共无参数构造函数实现可序列化。
就是这样,这只是一个惯例。但许多图书馆都依赖它。
关于Serializable,请参阅API文档:
类的可序列化性由实现java.io.Serializable接口。不实现此功能的类接口将不会序列化或反序列化它们的任何状态。可序列化类的所有子类型本身都是可序列化的。这个序列化接口没有方法或字段,仅用于识别可序列化的语义。
换言之,可序列化对象可以写入流,因此可以写入文件、对象数据库等。
此外,JavaBean和另一个类之间没有语法差异——如果一个类遵循标准,那么它就是JavaBean。
这是一个术语,因为该标准允许库以编程方式处理您以预定义方式定义的类实例。例如,如果一个库想要流式传输您传递给它的任何对象,它知道可以这样做,因为您的对象是可序列化的(假设库要求您的对象为正确的JavaBeans)。
有一个术语可以让它听起来很特别。现实远没有那么神秘。
基本上,一个“憨豆”:
是一个可串行化的对象(即,它实现java.io.serializable,并正确执行)具有“财产”,其getter和setter只是具有特定名称的方法(例如,getFoo()是“Foo”属性的getter),并且有一个公共的零参数构造函数(因此可以随意创建并通过设置其财产进行配置)。
至于Serializable:这只是一个“标记接口”(一个不声明任何函数的接口),它告诉Java实现类同意(并暗示它能够)“序列化”——一个将实例转换为字节流的过程。这些字节可以存储在文件中,通过网络连接等发送,并且具有足够的信息,允许JVM(至少是一个了解对象类型的JVM)稍后重建对象——可能在应用程序的不同实例中,甚至在整个其他机器上!
当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是,所有实例字段必须要么是原始类型(int、bool等),要么是某些类的实例,也可以是可序列化的,要么标记为瞬时的,这样Java就不会试图包含它们。(这当然意味着瞬态字段将无法在流上运行。如果需要,具有瞬态字段的类应该准备好重新初始化它们。)
不能遵守这些限制的类不应该实现Serializable(而且,IIRC,Java编译器甚至不允许它这样做)
要理解JavaBean,您需要注意以下几点:
JavaBean是概念性的东西,不能表示一类特定的东西
JavaBean是一种开发工具,可以在可重用软件组件的操作中可视化
JavaBean基于SunJavaBeans规范,可以是可重用的组件。它最大的特点是可重用性。
它们是可序列化的,具有零参数构造函数,并允许使用getter和setter方法访问财产。命名“Bean”是为了包含这个标准,它旨在为Java创建可重用的软件组件。根据维基百科。
构成应用程序主干并由SpringIoC容器管理的对象称为bean。bean是由Spring IoC容器实例化、组装和管理的对象。否则,bean只是应用程序中许多对象中的一个。根据Spring IoC。
Spring@Bean注释表示一个方法生成一个由Spring容器管理的Bean。
更多参考:https://www.concretepage.com/spring-5/spring-bean-annotation