什么是JavaBean?
我明白,我认为,“Bean”是一个具有属性和getter / setter的Java类。 据我所知,它是相当于一个C结构。 真的吗?
另外,bean和普通类之间是否存在真正的语法差异? 有没有特别的定义或界面?
基本上,为什么会有这个词?
编辑 :如果你可以如此善良,并添加有关Serializable
接口的信息,以及它的意思,对你的答案,我会非常感激。
JavaBean只是一个标准
- 所有属性private(使用getters / setters )
- 公共的无参数构造函数
- 实现
Serializable
。
而已。 这只是一个惯例。 很多图书馆依赖于它…
关于Serializable
,从API文档 :
通过实现java.io.Serializable接口的类来启用类的可序列化。 没有实现这个接口的类将不会有任何状态序列化或反序列化。 所有可序列化类的子类本身都是可序列化的。 序列化接口没有方法或字段,仅用于识别可序列化的语义。
换句话说,可序列化的对象可以写入stream,因此文件,对象数据库,任何东西都可以。
此外,JavaBean和另一个类之间没有语法上的区别 – 一个类如果遵循标准定义了一个JavaBean。
这里有一个术语,因为标准允许库以编程方式使用您以预定义方式定义的类实例执行任务。 例如,如果一个库想要传入任何你传入的对象,它就知道它可以,因为你的对象是可序列化的(假设lib需要你的对象是适当的JavaBean)。
有一个术语让它听起来很特别。 现实远不如此神秘。
基本上,一个“豆”:
- 是一个可序列化的对象(也就是说,它实现了
java.io.Serializable
,并且是正确的) - 具有“属性”,其getter和setter只是具有特定名称的方法(比如说,
getFoo()
是“Foo”属性的getter), - 有一个公共的默认构造函数(因此可以随意创build,并通过设置其属性进行configuration)。
更新:
至于Serializable
:这只不过是一个“标记接口”(一个没有声明任何函数的接口),它告诉Java实现类同意(并且暗示它有能力)“序列化” – 一个进程将实例转换为字节stream。 这些字节可以存储在文件中,通过networking连接等发送,并有足够的信息允许JVM(至less知道对象的types)稍后重build对象 – 可能在不同的实例中应用程序,甚至整个其他机器!
当然,为了做到这一点,class级必须遵守一定的限制。 其中最主要的是所有的实例字段都必须是原始types(int,bool等),某些类的实例也是可序列化的,或者标记为transient
以便Java不会尝试包含它们。 (这当然意味着transient
场将无法在stream之上继续存在,如果需要的话,应该准备一个具有transient
场的类来重新初始化它们。)
一个不能遵守这些限制的类不应该实现Serializable
(并且,IIRC,Java编译器甚至不会让它这样做)。
JavaBeans是坚持一个非常简单的编码惯例的Java类。 你所要做的就是
- 实现java.io.Serializable接口 – 保存对象的状态
- 使用公共的空参数构造函数 – 实例化对象
- 并提供公共的getter和setter方法 – 获取和设置私有variables(属性)的值。
JavaBeans的属性
JavaBean是满足某些编程约定的Java对象:
-
JavaBean类必须实现Serializable或Externalizable
-
JavaBean类必须有一个无参数构造函数
-
所有JavaBean属性都必须具有公共setter和getter方法
-
所有的JavaBean实例variables都应该是私有的
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 Beans正在使用更less的代码和更多的工作方法… Java Beans在整个Java EE中被用作运行时发现和访问的通用协议。 例如,JavaServer Pages(JSP)使用Java Beans作为页面之间或Servlet和JSP之间的数据传输对象。 Java EE的JavaBeans Activation Framework使用Java Beans将对MIME数据types的支持集成到Java EE中。 Java EEpipe理API使用JavaBean作为在Java EE环境中pipe理资源的工具的基础。
关于序列化:
在对象序列化中,一个对象可以表示为一个包含对象数据的字节序列,以及关于对象types和存储在对象中的数据types的信息。
序列化对象写入文件后,可以从文件中读取并反序列化,即可以使用表示对象及其数据的types信息和字节来重新创build内存中的对象。
在跨越多个服务器部署项目时,您会发现序列化非常有用,因为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 = is; } public void setName(String name) { this.name = name; } }
根据维基百科:
-
这个类必须有一个公共的默认构造函数(没有参数)。 这允许在编辑和激活框架内容易实例化。
-
必须使用get,set,is(可以用于布尔属性而不是get)和其他方法(所谓的访问器方法和mutator方法)按照标准命名约定访问类属性。 这允许在框架内轻松自动检查和更新bean状态,其中许多包括各种属性的自定义编辑器。 安装者可以有一个或多个参数。
-
这个类应该是可序列化的。 [这允许应用程序和框架以独立于虚拟机和平台的方式可靠地保存,存储和恢复bean的状态。]
有关更多信息,请点击此链接。
关于您的问题的第二部分,序列化是一种持久性机制,用于将对象存储为一系列有符号字节。 不太正式的放置,它存储对象的状态,以便以后可以通过反序列化来检索它。
Java Beans是一个标准,其基本的语法要求已经被其他答案清楚地解释了。
但是,IMO不仅仅是一个简单的语法标准。 Java Beans的真正含义或预期的用法是与标准的各种工具支持一起,以促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构build应用程序,而不必编写任何代码(或者只需要写一点胶水代码)。 不幸的是,这个技术被业界低估和利用不足,可以从这个主题的答案中得知。
如果您阅读Oracle的Java Bean教程 ,您可以更好地理解这一点。
它们是可序列化的,具有零参数构造函数,并允许使用getter和setter方法访问属性。 “Bean”这个名字是为了包含这个标准,目的是为Java创build可重用的软件组件。 according to
维基
构成应用程序的骨干并由Spring IoC容器pipe理的对象称为bean。 bean是一个实例化,组装并由Spring IoC容器pipe理的对象。 否则,bean只是应用程序中众多对象中的一个。 according to
springio 。
一个Java Bean是一个java类[概念],应遵循以下约定:
- 它应该有一个无参数的构造函数。
- 它应该是可序列化的。
- 它应该提供方法来设置和获取属性的值,称为getter和setter方法。
它是一个可重用的软件组件。 它可以将多个对象封装成一个对象,使得同一个对象可以从多个地方访问,并且是易于维护代码的一个步骤。
为了理解JavaBean,您需要注意以下几点:JavaBean是一个概念性的东西,不能代表一类具体的东西
JavaBean是一个可以在可重用软件组件的操作中可视化的开发工具
JavaBean基于Sun JavaBeans规范,可以是可重用的组件。 其最大的特点是可重用性。
Java Bean只是遵循某些约定的普通Java类 – 您不需要特殊的工具来创build它们。
在创buildJava Bean类时必须遵循两个主要的约定:
- 通过定义两个公共函数(“get”函数和“set”函数)来实现Java Bean类的每个“ 属性 ”
- Java Bean类的“ 操作 ”是类中定义的其他公共函数。