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

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

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

Serializable接口是什么意思?


当前回答

当在多个服务器上部署项目时,您会发现序列化非常有用,因为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;
   }
}

举例说明。

1.导入java.io.Serializable

关于序列化,请参阅文档。

2.私人领域

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

3.施工人员

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

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 = id;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Spring@Bean注释表示一个方法生成一个由Spring容器管理的Bean。

更多参考:https://www.concretepage.com/spring-5/spring-bean-annotation

JavaBeans用于更少的代码和更多的工作方法。。。

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

关于序列化:

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

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

上面重复了6或7次,说明JavaBeans没有参数构造函数要求。

这是错误的,没有这样的要求,特别是在JavaSpring的上下文中。

描述JavaBeans API的规范版本(1.01)中也没有提到这一要求(https://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/). 此外,本规范在以下上下文中仅2次提到“null构造函数”:“每个自定义程序都应有一个空构造函数。”“每个PropertyEditor都应有一个空构造函数。”

因此,该规范的作者似乎不知道或不愿意使用“空构造函数”这一术语,对于JavaBeans本身,仍然没有提及它。