首页 文章

什么是JavaBean?

提问于
浏览
1437

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

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

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

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

14 回答

  • 1

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

  • 9

    用例子说明 .

    1. import java.io.Serializable

    至于序列化,请参阅documentation .

    2. private fields

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

    3. Constructor

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

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

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

    • 它应该有一个无参数的构造函数 .

    • 应该是Serializable .

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

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

  • 2

    JavaBean只是一个standard

    而已 . 这只是一个惯例 . 很多图书馆依赖它 .

    关于 Serializable ,来自API documentation

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

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

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

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

  • 52

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

    基本上,一个“ beans ”:

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

    • 有"properties",其getter和setter只是具有某些名称的方法(例如, getFoo() 是"Foo"属性的getter),并且

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

    更新:

    至于 Serializable :这只是一个"marker interface"(一个不具有't declare any functions) that tells Java that the implementing class consents to (and implies that it is capable of) 313661 -- a process that converts an instance into a stream of bytes. Those bytes can be stored in files, sent over a network connection, etc, and have enough info to allow a JVM (at least, one that knows about the object'类型的接口),以便稍后重建对象 - 可能在应用程序的不同实例中,甚至在整个其他机器上!

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

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

  • 250

    根据维基百科:

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

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

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

    有关更多信息,请按照link.

  • 82

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

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

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

  • 7

    Java Bean本质上是一个类,将类分类为bean的是:

    • 它应该实现可序列化的接口(标记接口) .

    • 构造函数应该是public的,没有参数(其他人称之为no-arg构造函数) .

    • 应该有吸气剂和固定剂 .

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

    Java Bean用于更少的代码和更多的工作方法...... Java Bean在整个Java EE中用作运行时发现和访问的通用 Contract . 例如,JavaServer Pages(JSP)使用Java Beans作为页面之间或servlet和JSP之间的数据传输对象 . Java EE的JavaBeans Activation Framework使用Java Bean将MIME数据类型的支持集成到Java EE中 . Java EE Management API使用JavaBeans作为在Java EE环境中管理资源的工具的基础 .

    关于序列化:

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

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

  • 6

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

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

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

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

  • 7

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

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

    如果您阅读了Oracle的tutorial on Java Beans,那么您可以更好地理解它 .

  • 17

    JavaBeans的属性

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

    • JavaBean类必须实现 SerializableExternalizable

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

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

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

  • 18

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

相关问题