我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?
此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?
基本上,为什么有一个术语?
Serializable接口是什么意思?
我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?
此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?
基本上,为什么有一个术语?
Serializable接口是什么意思?
当前回答
JavaBean的财产
JavaBean是满足某些编程约定的Java对象:
JavaBean类必须实现Serializable或可外部化JavaBean类必须具有无参数构造函数所有JavaBean财产都必须具有公共setter和getter方法所有JavaBean实例变量都应该是私有的
JavaBeans示例
@Entity
public class Employee implements Serializable{
@Id
private int id;
private String name;
private int salary;
public Employee() {}
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
其他回答
POJO(普通的旧Java对象):POJO是普通的Java对象,除了Java语言强制的限制外,没有其他限制。
序列化:用于保存对象的状态并通过网络发送。它将对象的状态转换为字节流。我们可以通过称为反序列化的过程从字节流中重新创建Java对象。
使类实现java.io.Serializable接口。并使用ObjectOutputStream类的writeObject()方法实现序列化。
JavaBean类:它是一个特殊的POJO,有一些限制(或约定)。
实现序列化具有公共无参数构造函数所有财产都是私有的,使用公共getters和setter方法。
许多框架(如Spring)使用JavaBean对象。
JavaBean的财产
JavaBean是满足某些编程约定的Java对象:
JavaBean类必须实现Serializable或可外部化JavaBean类必须具有无参数构造函数所有JavaBean财产都必须具有公共setter和getter方法所有JavaBean实例变量都应该是私有的
JavaBeans示例
@Entity
public class Employee implements Serializable{
@Id
private int id;
private String name;
private int salary;
public Employee() {}
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getName() {
return name;
}
public void setName( String name ) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
只是关于bean概念的一些背景/更新。许多其他答案实际上都有其原因,但没有那么多原因。
它们是在Java早期作为构建GUI的一部分而发明的。他们遵循的模式很容易被工具拆开,让他们创建一个财产面板,这样您就可以编辑Bean的属性。通常,Bean财产表示屏幕上的控件(想想x、y、宽度、高度、文本…)
您也可以将其视为强类型数据结构。
随着时间的推移,这些工具对于使用相同类型访问的许多工具变得有用(例如,Hibernate将数据结构持久化到数据库)
随着工具的发展,它们更多地转向注释,而不是分离setter/getter名称。现在大多数系统都不需要bean,它们可以使用任何带注释财产的普通旧Java对象来告诉它们如何操作它们。
现在我将bean视为带注释的属性球——它们只对它们所携带的注释有用。
豆类本身并不是一种健康的模式。由于它们将所有财产暴露给外部操作,因此它们本质上破坏了封装,并且在使用它们时,有一种趋势(绝非要求),即创建代码以外部操作bean,而不是在bean内创建代码(违反了“不要求对象提供其值,要求对象为您做一些事情”)。使用带有最小getter和无setter的带注释POJO更像是OO还原封装,并且具有不变性的可能性。
顺便说一句,当所有这些事情发生时,有人将这个概念扩展到了名为EnterpriseJavaBeans的东西上。这些是。。。不同的它们非常复杂,以至于许多人觉得他们不理解整个Bean概念,并停止使用这个术语。我想,这就是为什么你通常会听到bean被称为POJO(因为每个Java对象都是POJO,这在技术上是可以的,但当你听到某人说POJO时,他们通常会想到遵循bean模式的东西)
举例说明。
1.导入java.io.Serializable
关于序列化,请参阅文档。
2.私人领域
字段应该是私有的,以防止外部类轻易修改这些字段。通常使用getter/setter方法,而不是直接访问这些字段。
3.施工人员
没有任何参数的公共构造函数。
4.吸气器/设置器
用于访问和修改私有字段的Getter和setter方法。
/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
/** 2. private fields */
private int id;
private String name;
/** 3. Constructor */
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
/** 4. getter/setter */
// getter
public int getId() {
return id;
}
public String getName() {
return name;
}
// setter
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
要理解JavaBean,您需要注意以下几点:
JavaBean是概念性的东西,不能表示一类特定的东西
JavaBean是一种开发工具,可以在可重用软件组件的操作中可视化
JavaBean基于SunJavaBeans规范,可以是可重用的组件。它最大的特点是可重用性。