什么是javabean?
可能重复:什么是javabean?,java,javabeans,Java,Javabeans,可能重复: 什么是javabean?它是用来干什么的?还有哪些代码示例?我听说它是用来处理getter和setter方法的?我对什么是JavaBean以及在哪里访问它感到非常困惑。我在谷歌上搜索了它,但找不到确切的答案。JavaBean是一个普通的Java类,它的公共getter和setter方法具有私有属性 JavaBean通常用作助手类 示例- public class User implements java.io.Serializable { private String n
什么是javabean?它是用来干什么的?还有哪些代码示例?我听说它是用来处理getter和setter方法的?我对什么是JavaBean以及在哪里访问它感到非常困惑。我在谷歌上搜索了它,但找不到确切的答案。JavaBean是一个普通的Java类,它的公共getter和setter方法具有私有属性 JavaBean通常用作助手类 示例-
public class User implements java.io.Serializable {
private String name;
private Integer age;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public Integer getAge(){
return this.age;
}
public void setAge(Integer age){
this.age = age;
}
}
实现Serializable
不是强制性的,但如果您希望在Java内存之外(例如在硬盘中或通过网络)持久化或传输JavaBean,这是非常有用的
JavaBeans是可重用的Java软件组件。实际上,它们是用符合特定约定的Java编程语言编写的类。它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个bean对象而不是多个单独的对象传递。JavaBean是可序列化的Java对象,具有0参数构造函数,并允许使用getter和setter方法访问属性 优势
- Bean获得了Java“一次编写,随处运行”范例的所有好处
- 可以控制向另一个应用程序公开的Bean的属性、事件和方法
- 可以提供辅助软件来帮助配置Bean
- Bean的配置设置可以保存在持久性存储器中,并可以在以后恢复
- Bean可以注册以接收来自其他对象的事件,并可以生成发送给它的事件
- 具有空构造函数的类可能会在无效状态下实例化。如果这样的类是由开发人员手动实例化的(而不是由某种框架自动实例化的),那么开发人员可能没有意识到他已在无效状态下实例化了该类。编译器无法检测到这样的问题,即使有文档记录,也不能保证开发人员会看到文档
- 必须为每个属性创建一个getter,为许多、大多数或所有属性创建一个setter,这会创建大量样板代码
package beans;
/**
* Class <code>PersonBean</code>.
*/
public class PersonBean implements java.io.Serializable {
private String name;
private boolean deceased;
static final long serialVersionUID = 1L;
/** No-arg constructor (takes no arguments). */
public PersonBean() {
}
/**
* Property <code>name</code> (note capitalization) readable/writable.
*/
public String getName() {
return this.name;
}
/**
* Setter for property <code>name</code>.
* @param name
*/
public void setName(final String name) {
this.name = name;
}
/**
* Getter for property "deceased"
* Different syntax for a boolean field (is vs. get)
*/
public boolean isDeceased() {
return this.deceased;
}
/**
* Setter for property <code>deceased</code>.
* @param deceased
*/
public void setDeceased(final boolean deceased) {
this.deceased = deceased;
}
}
提及
根据@Andy的评论,我接受我们应该声明serialVersionUID。依照
如果可序列化类未显式声明serialVersionUID,则序列化运行时将根据该类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化过程中可能会导致意外的InvalidClassException。因此,为了保证不同java编译器实现之间的SerialVersionId值一致,可序列化类必须声明显式的SerialVersionId值。还强烈建议显式serialVersionUID声明在可能的情况下使用private修饰符,因为此类声明仅适用于立即声明的类——serialVersionUID字段不可用作继承成员。数组类不能声明显式的serialVersionUID,因此它们始终具有默认的计算值,但数组类不需要匹配serialVersionUID值。
如果不显式指定serialVersionUID,则会自动生成一个值-但这很脆弱,因为它依赖于编译器实现。如果您谈论的是java beans而不是EJB beans,那么下面是解释 1.JavaBean有一个不带参数的构造函数 2.JavaBean有一组属性 3.JavaBean具有允许访问其底层属性的访问器(getXxx,或用于布尔属性的isXxx)方法和mutator方法(setXxx) 第三点说明了一个java类,该类包含私有实例变量和公共getter、setter。 例如:
JavaBeanAPI定义了许多关于JavaBean的约定。根据维基百科: 所需公约如下:
- 该类必须具有公共默认构造函数(无参数)。这允许在编辑和激活框架内轻松实例化
- 必须使用get、set、is(用于布尔属性而不是get)和其他方法(所谓的 访问器方法和mutator方法),遵循标准命名 惯例。这允许轻松地自动检查和更新bean 框架内的状态,其中许多框架包括 各种类型的属性。setter只能接收一个参数
- 该类应该是可序列化的。它允许应用程序和框架可靠地保存、存储和恢复bean的状态 独立于虚拟机和平台的时尚
public class Person implements Serializable
{
private String name;
private boolean alive;
public Person()
{
// constructor logic...
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public boolean isAlive()
{
return alive;
}
public void setAlive(boolean alive)
{
this.alive = alive;
}
}
如您所见,属性反映在getter和setter中
HTH公共默认构造函数呢?@IlyaBuziuk根据,如果没有明确定义公共默认构造函数,Java将自动提供该构造函数。我认为这意味着您应该安全地在bean定义中省略一个类。所以,如果它只是一个普通类,为什么还要麻烦调用它呢
public class Person implements Serializable
{
private String name;
private boolean alive;
public Person()
{
// constructor logic...
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public boolean isAlive()
{
return alive;
}
public void setAlive(boolean alive)
{
this.alive = alive;
}
}