我认为,我理解“Bean”是一个具有财产和getters/setter的Java-class。据我所知,它相当于C结构。这是真的吗?

此外,JavaBean和常规类之间是否存在真正的语法差异?是否有特殊定义或接口?

基本上,为什么有一个术语?

Serializable接口是什么意思?


当前回答

根据维基百科:

类必须具有公共默认构造函数(没有参数)。这允许在编辑和激活框架内轻松实例化。根据标准命名约定,类财产必须可以使用get、set、is(可以用于布尔财产而不是get)和其他方法(所谓的访问器方法和赋值器方法)进行访问。这允许在框架内轻松地自动检查和更新bean状态,其中许多框架包括各种类型财产的自定义编辑器。setter可以有一个或多个参数。该类应该是可序列化的。(这允许应用程序和框架以独立于VM和平台的方式可靠地保存、存储和恢复bean的状态。)

有关详细信息,请单击此链接。

其他回答

关于问题的第二部分,序列化是一种持久性机制,用于将对象存储为一系列带符号的字节。不太正式地说,它存储对象的状态,以便以后可以通过反序列化来检索它。

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;
   }
}

JavaBean是满足以下三个条件的任何Java类:

它应该实现可序列化接口(Marker接口)。构造函数应该是公共的,并且没有参数(其他人称之为“无参数构造函数”)。它应该有getter和setter。

值得注意的是,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;
}}

JavaBeans是一种标准,其基本语法要求已由其他答案明确解释。

然而,IMO,它不仅仅是一个简单的语法标准。JavaBeans的真正含义或预期用途是,与围绕标准的各种工具支持一起,促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构建应用程序,而无需编写任何代码(或只需编写少量粘合代码)。不幸的是,这项技术被业界低估和利用不足,从本主题的答案中可以看出这一点。

如果您阅读Oracle的JavaBeans教程,您可以更好地理解这一点。

如果您想了解JavaBeans,首先必须了解软件组件。

软件组件

软件组件是运行特定操作的应用程序的一部分。软件组件也可以是服务的一部分。

一个组件是:

已耦合(具有依赖项)Statefull(保存实例变量的状态)不是标准化的,它是为特定的用例而设计的(JavaEEBeans之间的主要区别)在客户端计算机中运行

Java Beans(企业bean)

在Java EE服务器中运行的标准组件包括完成特定服务的不同业务逻辑简化复杂多层分布式系统的开发

JavaBeans更多的是管理大系统的概念。这就是为什么他们需要标准化。

来源