代码之家  ›  专栏  ›  技术社区  ›  Amir Rachum

JavaBean到底是什么?

  •  1525
  • Amir Rachum  · 技术社区  · 14 年前

    我认为,“bean”是一个具有属性和吸收器/设置器的Java类。据我所知,它相当于C结构。是真的吗?

    还有,有没有真正的 句法的 豆子班和普通班的区别?是否有特殊定义或接口?

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

    编辑 :如果您可以这样做并添加有关 Serializable 接口,以及它的含义。

    对于你的回答,我非常感激。

    14 回复  |  直到 6 年前
        1
  •  1697
  •   Hearen    6 年前

    JavaBean只是 standard

    1. 所有属性私有(使用 getters/setters )
    2. 公众 no-argument constructor
    3. 器具 Serializable .

    就是这样。这只是一个惯例。但是很多图书馆都依赖它。

    关于 可串行化的 ,从 API documentation :

    类的可序列化性由实现 java.io.serializable接口。不实现此的类 接口的任何状态都不会序列化或反序列化。 可序列化类的所有子类型本身都是可序列化的。这个 序列化接口没有方法或字段,只能用于 标识可序列化的语义。

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

    另外,JavaBean和另一个类没有语法上的区别——如果遵循标准,类就是JavaBean。

    它有一个术语,因为该标准允许库以编程方式处理以预定义方式定义的类实例。例如,如果一个库想要将您传递给它的任何对象进行流式处理,它知道可以,因为您的对象是可序列化的(假设lib要求您的对象是适当的javaBeans)。

        2
  •  260
  •   cHao    6 年前

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

    基本上,一个“豆子”:

    • 是可序列化对象(即,它实现 java.io.Serializable 正确的做法),即
    • 具有“属性”,其getter和setter只是具有特定名称的方法(例如, getFoo() 是“foo”属性的getter),并且
    • 具有公共的0-arg构造函数(因此可以随意创建并通过设置其属性进行配置)。

    更新:

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

    当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是,所有实例字段必须是基元类型(int、bool等)、也可以序列化的某些类的实例,或者标记为 transient 这样Java就不会试图包含它们了。(这当然意味着 瞬态 田野在溪流中无法生存。一个有 瞬态 如有必要,应准备重新初始化字段。)

    不能遵守这些限制的类不应该实现 可串行化的 (而且,Irc,Java编译器甚至都不会。 确实如此。

        3
  •  83
  •   Hearen    6 年前

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

    1. 实施 java.io.Serializable 接口-保存 对象
    2. 使用公共空参数构造函数-实例化对象
    3. 提供公共getter/setter方法-以获取和设置私有变量(属性)的值。
        4
  •  53
  •   piet.t Charis A.    7 年前

    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;
       }
    }
    
        5
  •  18
  •   Mike Braun    11 年前

    Java bean使用更少的代码和更多的工作方法… JavaBean在整个JavaEE中被用作运行时发现和访问的通用契约。例如,JavaServer页面(JSP)使用JavaBean作为页面之间或Servlet和JSP之间的数据传输对象。JavaEE的JavaBeans激活框架使用JavaBean,将MIME数据类型的支持集成到JavaEE中。JavaEE管理API使用JavaBeans作为在JavaEE环境中管理资源的工具的基础。

    关于序列化:

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

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

        6
  •  17
  •   Truong Ha    14 年前

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

        7
  •  17
  •   Mr.Q    6 年前

    举例说明。

    1。导入java.io.serializable

    至于序列化,请参见 documentation .

    2。私人领域

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

    三。构造函数

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

    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;
        }
    }
    
        8
  •  9
  •   Diganta    10 年前

    根据维基百科:

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

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

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

    有关详细信息,请遵循以下步骤 link.

        9
  •  9
  •   Victor    8 年前

    JavaBean是一个标准,它的基本语法要求已经被其他答案清楚地解释了。

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

    如果你读了甲骨文 tutorial on Java Beans 你可以从中得到更好的理解。

        10
  •  7
  •   Mike    12 年前

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

        11
  •  7
  •   Raghav salotra    8 年前

    JavaBean是一个Java类(概念性的),应该遵循以下约定:

    1. 它应该有一个无参数的构造函数。
    2. 它应该是可序列化的。
    3. 它应该提供设置和获取属性值的方法,称为getter和setter方法。

    它是一个可重用的软件组件。它可以将多个对象封装到一个对象中,这样就可以从多个地方访问同一个对象,这是实现代码易于维护的一步。

        12
  •  6
  •   Balman Rawat    9 年前

    它们是可序列化的,具有零参数构造函数,并且允许使用getter和setter方法访问属性。名称“bean”被赋予包含这个标准,其目的是为Java创建可重用的软件组件。 according to wiki

    构成应用程序主干并由SpringIOC容器管理的对象称为bean。bean是一个由SpringIOC容器实例化、组装和管理的对象。否则,bean只是应用程序中许多对象中的一个。 根据 spring io .

        13
  •  3
  •   Pang Ajmal PraveeN    6 年前

    Java bean本质上是一个类,将类归类为bean是:

    1. 它应该实现可序列化接口(标记接口)。
    2. 构造函数应该是公共的,没有参数(其他人称之为无参数构造函数)。
    3. 它应该有getter和setter。

    注意serialversionID字段对于维护对象状态很重要。 以下代码符合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;
    }}
    
        14
  •  2
  •   Marcus Thornton    11 年前

    要理解JavaBean,您需要注意以下几点: JavaBean是一种概念性的东西,不能代表一类特定的东西。

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

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