提问



我认为,我认为Bean是一个带有属性和getter/setter的Java类。据我所知,它相当于C结构。真的吗?


另外,bean和普通类之间是否存在真正的语法差异?有没有特殊的定义或界面?


基本上,为什么会有这个术语呢?


编辑:如果您能够如此友善并添加有关Serializable界面的信息,以及它的含义,请回答您的意见,我将非常感激。

最佳参考


JavaBean只是一个标准[17]



  1. 所有属性私有(使用getters/setters)

  2. 公共无参数构造函数

  3. 实施Serializable



这就是它。它只是一个惯例。很多图书馆依赖它。[18] [19] [20]


关于Serializable,来自API文件:[21]



  类的可序列化由实现该类的类启用
  java.io.Serializable接口。没有实现此功能的类
  接口不会将其任何状态序列化或反序列化。
  可序列化类的所有子类型本身都是可序列化的。该
  序列化接口没有方法或字段,仅用于
  识别可序列化的语义。



换句话说,可序列化的对象可以写入流,因此文件,对象数据库,任何东西都可以。


此外,JavaBean与另一个类之间没有语法差异 - 如果JavaBean遵循标准,则该类定义JavaBean。


它有一个术语,因为标准允许库以编程方式使用您以预定义方式定义的类实例来执行操作。例如,如果一个库想要传递你传递给它的任何对象,它就知道它可以因为你的对象是可序列化的(假设lib要求你的对象是正确的JavaBeans)。

其它参考1


有一个术语让它听起来很特别。现实远不是那么神秘。


基本上,一个豆:



  • 是一个可序列化的对象(即它实现java.io.Serializable,并且正确地执行),

  • 有属性,其getter和setter只是具有特定名称的方法(例如,getFoo()是Foo属性的getter),

  • 有一个公共默认构造函数(因此可以随意创建并通过设置其属性进行配置)。



更新:[22]


至于Serializable:这只是一个标记接口(一个没有声明任何函数的接口)告诉Java实现类同意(并暗示它能够)序列化 - - 将实例转换为字节流的过程。这些字节可以存储在文件中,通过网络连接发送等,并且有足够的信息来允许JVM(至少,知道对象的类型) )以后重建对象 - 可能在应用程序的不同实例中,甚至在整个其他机器上!


当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是所有实例字段必须是原始类型(int,bool等),某些类的实例也可序列化,或标记为transient,以便Java不会尝试包含它们。(这当然意味着transient字段不会在流上的行程中存活。具有transient字段的类应该准备好在必要时重新初始化它们。)


一个不能遵守这些限制的类不应该实现Serializable(而且,IIRC,Java编译器甚至不会让让这样做。)

其它参考2


JavaBeans是遵循极其简单的编码约定的Java类。
你所要做的就是



  1. 实现java.io.Serializable接口 - 保存状态
    对象

  2. 使用公共空参数构造函数 - 实例化对象

  3. 并提供公共getter和setter方法 - 获取和设置私有变量(属性)的值。


其它参考3


JavaBeans的属性


JavaBean是一个满足某些编程约定的Java对象:



  1. JavaBean类必须实现Serializable
    Externalizable

  2. JavaBean类必须具有无参数构造函数

  3. 所有JavaBean属性都必须具有公共setter和getter方法

  4. 所有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;
   }
}

其它参考4


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环境中管理资源的工具的基础。


关于序列化:


在对象序列化中,对象可以表示为字节序列,其包括对象的数据以及关于对象的类型和存储在对象中的数据类型的信息。


将序列化对象写入文件后,可以从文件中读取并反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。

其它参考5


在跨多个服务器部署项目时,您会发现序列化非常有用,因为bean将被持久化并在它们之间传输。

其它参考6


用例子说明。


1。 import java.io.Serializable


至于序列化,请参阅文档。[23]


2。私人领域


字段应该是私有的,以防止外部类轻松修改这些字段。
使用usuagly getter/setter方法而不是直接访问这些字段。


第3。构造


没有任何参数的公共构造函数。


4。的getter/setter


用于访问私有字段的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;
    }
}

其它参考7


根据维基百科:



  1. 该类必须具有公共默认构造函数(不带参数)。这允许在编辑和激活框架内轻松实例化。

  2. 根据标准命名约定,必须使用get,set,is(可用于布尔属性而不是get)以及其他方法(所谓的访问器方法和mutator方法)来访问类属性。这允许在框架内轻松自动检查和更新bean状态,其中许多包括用于各种类型属性的自定义编辑器。 Setter可以有一个或多个参数。

  3. 该类应该是可序列化的。 [[这允许应用程序和框架以独立于VM和平台的方式可靠地保存,存储和恢复bean的状态。



有关更多信息,请点击此链接。[24]

其它参考8


Java Bean是一种标准,其基本语法要求已由其他答案清楚地解释。


但是,IMO,它不仅仅是一个简单的语法标准。 Java Beans的真正含义或预期用途是与标准周围的各种工具支持一起,以促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构建应用程序,而无需编写任何代码(或者只需编写一些胶水代码)。不幸的是,这种技术被业界低估和利用不足,可以从这个问题的答案中得知。


如果您阅读Oracle关于Java Bean的教程,您可以更好地理解它。[25]

其它参考9


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

其它参考10


Java Bean是一个java类[[概念]],它应遵循以下约定:



  1. 它应该有一个无参数构造函数。

  2. 应该是Serializable。

  3. 它应该提供设置和获取属性值的方法,称为getter和setter方法。



它是一个可重用的软件组件。它可以将许多对象封装到一个对象中,这样就可以从多个位置访问同一个对象,这是向容易维护代码迈出的一步。

其它参考11


它们是可序列化的,具有零参数构造函数,并允许使用getter和setter方法访问属性。 Bean这个名称包含了这个标准,旨在为Java创建可重用的软件组件。according to wiki [26]


构成应用程序主干并由Spring IoC容器管理的对象称为bean。 bean是一个由Spring IoC容器实例化,组装和管理的对象。否则,bean只是应用程序中众多对象之一。
according to春天io。[27]

其它参考12


Java Beans 只是遵循某些约定的普通Java类 - 您不需要特殊工具来创建它们。


创建Java Bean类时必须遵循两个主要约定:



  • Java Bean类的每个属性都是通过定义两个公共函数(get函数和set函数)来实现的。

  • Java Bean类的操作是该类中定义的其他公共函数。


其它参考13


要了解JavaBean,您需要注意以下事项:
JavaBean是一个概念性的东西,不能代表一类特定的东西


JavaBean是一个可以在可重用软件组件的操作中可视化的开发工具


JavaBean基于Sun JavaBeans规范,可以是可重用的组件。其最大的特点是可重用性。