我认为,我认为“Bean”是一个带有属性和getter / setter的Java类。据我所知,它相当于C结构。真的吗?
还有,真的有吗? 句法 bean和普通类之间的区别?有没有特殊的定义或界面?
基本上,为什么会有这个术语呢?
编辑:如果你可以这么善良并添加有关的信息 Serializable
界面,这意味着什么,对你的回答,我将非常感激。
我认为,我认为“Bean”是一个带有属性和getter / setter的Java类。据我所知,它相当于C结构。真的吗?
还有,真的有吗? 句法 bean和普通类之间的区别?有没有特殊的定义或界面?
基本上,为什么会有这个术语呢?
编辑:如果你可以这么善良并添加有关的信息 Serializable
界面,这意味着什么,对你的回答,我将非常感激。
JavaBean只是一个 标准
Serializable
。而已。这只是一个惯例。很多图书馆依赖它。
关于 Serializable
, 来自 API文档:
类的可序列化由实现该类的类启用 java.io.Serializable接口。没有实现此功能的类 接口不会将其任何状态序列化或反序列化。 可序列化类的所有子类型本身都是可序列化的。该 序列化接口没有方法或字段,仅用于 识别可序列化的语义。
换句话说,可序列化的对象可以写入流,因此文件,对象数据库,任何东西都可以。
此外,JavaBean与另一个类之间没有语法差异 - 如果JavaBean遵循标准,则该类定义JavaBean。
它有一个术语,因为标准允许库以编程方式使用您以预定义方式定义的类实例来执行操作。例如,如果一个库想要传递你传递给它的任何对象,它就知道它可以因为你的对象是可序列化的(假设lib要求你的对象是正确的JavaBeans)。
有一个术语让它听起来很特别。现实远没有那么神秘。
基本上,一个“豆”:
java.io.Serializable
,并且正确地这样做了)getFoo()
是“Foo”属性的吸气剂,和 更新:
至于 Serializable
:这只是一个“标记接口”(一个不声明任何函数的接口)告诉Java实现类同意(并暗示它能够)“序列化” - 一个转换实例的过程进入一个字节流。这些字节可以存储在文件中,通过网络连接发送等,并且有足够的信息允许JVM(至少是知道对象类型的那个)稍后重建对象 - 可能在不同的实例中应用程序,甚至是整个其他机器!
当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是所有实例字段必须是基本类型(int,bool等),某些类的实例也可序列化,或标记为 transient
这样Java就不会尝试包含它们。 (这当然意味着 transient
田地将无法在溪流中度过。有一个类 transient
如有必要,应准备好重新初始化它们。)
不能遵守这些限制的类不应该实现 Serializable
(而且,IIRC,Java编译器甚至不会 让 它这样做。)
JavaBeans是遵循极其简单的编码约定的Java类。 你所要做的就是
JavaBeans的属性
JavaBean是一个满足某些编程约定的Java对象:
JavaBean类必须实现 Serializable
要么
Externalizable
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;
}
}
Java Bean用于更少的代码和更多的工作方法...... Java Bean在整个Java EE中用作运行时发现和访问的通用契约。例如,JavaServer Pages(JSP)使用Java Beans作为页面之间或servlet和JSP之间的数据传输对象。 Java EE的JavaBeans Activation Framework使用Java Bean将MIME数据类型的支持集成到Java EE中。 Java EE Management API使用JavaBeans作为在Java EE环境中管理资源的工具的基础。
关于序列化:
在对象序列化中,对象可以表示为包含对象数据的字节序列,以及有关对象类型和对象中存储的数据类型的信息。
将序列化对象写入文件后,可以从文件中读取并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。
在跨多个服务器部署项目时,您会发现序列化非常有用,因为bean将被持久化并在它们之间传输。
用例子说明。
1. import java.io.Serializable
至于序列化,请参阅 文件。
私人领域
字段应该是私有的,以防止外部类轻松修改这些字段。 使用usuagly getter / setter方法而不是直接访问这些字段。
3.构造函数
没有任何参数的公共构造函数。
吸气剂/二传手
用于访问私有字段的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 = is;
}
public void setName(String name) {
this.name = name;
}
}
根据维基百科:
该类必须具有公共默认构造函数(不带参数)。这允许在编辑和激活框架内轻松实例化。
根据标准命名约定,必须使用get,set,is(可用于布尔属性而不是get)以及其他方法(所谓的访问器方法和mutator方法)来访问类属性。这允许在框架内轻松自动检查和更新bean状态,其中许多包括用于各种类型属性的自定义编辑器。 Setter可以有一个或多个参数。
该类应该是可序列化的。 [这允许应用程序和框架以独立于VM和平台的方式可靠地保存,存储和恢复bean的状态。
有关更多信息,请按照此处 链接。
Java Bean是一种标准,其基本语法要求已由其他答案清楚地解释。
但是,IMO,它不仅仅是一个简单的语法标准。 Java Beans的真正含义或预期用途是与标准周围的各种工具支持一起,以促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构建应用程序,而无需编写任何代码(或者只需编写一些胶水代码)。不幸的是,这种技术被业界低估和利用不足,可以从这个问题的答案中得知。
如果你读过Oracle的话 关于Java Bean的教程,你可以更好地理解。