我认为“Bean”是一个具有属性和Getter/Setter的Java类。据我所知,它相当于C语言中的结构体。这是真的吗?
此外,JavaBean与普通类之间是否存在真正的语法区别?
是否有特殊的定义或接口?
基本上,为什么会有这个术语?
另外,“Serializable”接口是什么意思?
我认为“Bean”是一个具有属性和Getter/Setter的Java类。据我所知,它相当于C语言中的结构体。这是真的吗?
此外,JavaBean与普通类之间是否存在真正的语法区别?
是否有特殊的定义或接口?
基本上,为什么会有这个术语?
另外,“Serializable”接口是什么意思?
根据维基百科:
该类必须具有公共默认构造函数(无参数)。这允许在编辑和激活框架内轻松实例化。
该类属性必须可通过 get、set、is(可用于布尔属性而不是 get)和其他方法(称为访问器方法和变异器方法)按照标准命名约定进行访问。这允许在各种框架内轻松自动检查和更新 bean 状态,其中许多包括各种类型属性的自定义编辑器。Setters 可以有一个或多个参数。
该类应该是可序列化的。(这允许应用程序和框架以与 VM 和平台无关的方式可靠地保存、存储和恢复 bean 的状态。)
要了解更多信息,请访问 link。
关于你问题的第二部分,序列化是一种持久化机制,用于将对象存储为一系列有符号字节。简单来说,它可以存储一个对象的状态,以便以后通过反序列化检索它。
Java Bean是一个Java类(概念性),应该遵循以下约定:
它是可重用的软件组件。它可以将许多对象封装成一个对象,以便从多个位置访问同一对象,并且是易于维护代码的一步。
@java.beans.ConstructorProperties
实现不可变性。原始规范已经过时,甚至没有意义。唯一真正的“标准”是在 java.beans.Introspector
中定义的内容。该类所做的唯一逻辑是检查是否存在具有 is/get/set 方法的方法。 - Adam GentJava Bean是指满足以下三个条件的任何Java类:
需要注意,serialVersionUID字段对于维护对象状态非常重要。
下面的代码就是Bean:
public class DataDog implements java.io.Serializable {
private static final long serialVersionUID = -3774654564564563L;
private int id;
private String nameOfDog;
// The constructor should NOT have arguments
public DataDog () {}
/** 4. getter/setter */
// Getter(s)
public int getId() {
return id;
}
public String getNameOfDog() {
return nameOfDog;
}
// Setter(s)
public void setId(int id) {
this.id = id;
}
public void setNameOfDog(String nameOfDog) {
this.nameOfDog = nameOfDog;
}}
如果您熟悉C/Golang,那么您从未听说过C bean或Go bean,因为它们具有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的一个失误是缺少struct
类型,开发者发现这个缺陷很糟糕。
然后Java Bean被发明出来,只是为了让class
假装成struct
,以平息你的编辑器或编译器对类成员不安全访问的抱怨或呼喊声。
POJO(普通的 Java 对象):POJOs 是普通的 Java 对象,除了 Java 语言强制规定的限制之外没有其他限制。
序列化:它用于保存对象的状态并在网络上发送。它将对象的状态转换为字节流。我们可以通过称为反序列化的过程从字节流中重新创建 Java 对象。
使您的类实现 java.io.Serializable 接口。并使用 ObjectOutputStream 类的 writeObject() 方法来实现序列化。
JavaBean 类:它是一个特殊的 POJO,具有一些限制(或约定)。
许多框架 - 如 Spring - 使用 JavaBean 对象。