Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaBean到底是什么?_Java_Javabeans_Serializable - Fatal编程技术网

JavaBean到底是什么?

JavaBean到底是什么?,java,javabeans,serializable,Java,Javabeans,Serializable,我认为,我理解“Bean”是一个具有属性和getter/setter的Java类。据我所知,它相当于C结构。这是真的吗 此外,bean和常规类之间是否存在真正的语法差异?是否有任何特殊的定义或接口 基本上,为什么会有这样一个术语 另外,可序列化接口意味着什么 JavaBean只是一个 所有属性都是私有的(使用) 公众 工具 就这样。这只是一个惯例。但很多图书馆都依赖它 关于可序列化的,来自: 类的可序列化性由实现 java.io.Serializable接口。未实现此功能的类 接口的任何状态都不

我认为,我理解“Bean”是一个具有属性和getter/setter的Java类。据我所知,它相当于C结构。这是真的吗

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

基本上,为什么会有这样一个术语

另外,
可序列化
接口意味着什么

JavaBean只是一个

  • 所有属性都是私有的(使用)
  • 公众
  • 工具
  • 就这样。这只是一个惯例。但很多图书馆都依赖它

    关于
    可序列化的
    ,来自:

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

    换句话说,可以将可序列化对象写入流,从而写入文件、对象数据库等任何内容

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


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

    有一个术语让它听起来很特别。事实远非如此神秘

    基本上是“豆子”:

    • 是一个可序列化对象(也就是说,它实现并正确执行此操作),该
    • 具有“属性”,其getter和setter只是具有特定名称的方法(例如,
      getFoo()
      是“Foo”属性的getter),并且
    • 具有公共零参数构造函数(因此可以随意创建并通过设置其属性进行配置)
    至于
    Serializable
    :这只是一个“标记接口”(一个不声明任何函数的接口),它告诉Java实现类同意(并暗示它能够)“序列化”——一个将实例转换为字节流的过程。这些字节可以存储在文件中,通过网络连接发送,等等,并且有足够的信息允许JVM(至少,知道对象类型的JVM)稍后重构对象——可能在应用程序的不同实例中,甚至在整个其他机器上

    当然,为了做到这一点,班级必须遵守某些限制。其中最主要的是,所有实例字段必须要么是基本类型(int、bool等),要么是一些同样可序列化的类的实例,要么被标记为
    transient
    ,这样Java就不会试图包含它们。(这当然意味着
    transient
    字段将无法在流上运行。如果需要,具有
    transient
    字段的类应准备重新初始化它们。)


    不能遵守这些限制的类不应该实现可序列化的(而且,IIRC,Java编译器甚至不允许它这样做。)

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

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

  • 实现
    java.io.Serializable
    接口-保存 反对
  • 使用公共空参数构造函数-实例化对象
  • 提供公共getter/setter方法-获取和设置私有变量(属性)的值

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

    要理解JavaBean,您需要注意以下几点:

    JavaBean是概念性的东西,不能表示一类特定的东西

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


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

    Java Bean用于更少的代码和更多的工作方法

    JavaBean作为运行时发现和访问的通用契约在整个JavaEE中使用。例如,JavaServerPages(JSP)使用JavaBean作为页面之间或servlet与JSP之间的数据传输对象。JavaEE的JavaBeans激活框架使用JavaBeans将对MIME数据类型的支持集成到JavaEE中。java EE管理API使用JavaBeans作为在java EE环境中管理资源的基础。 关于序列化:

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


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

    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对象:

  • JavaBean类必须实现
    Serializable
    Externalizable

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

  • 所有JavaBean属性
    /** 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 = id;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    
    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;
    }}