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

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

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

Serializable接口是什么意思?


当前回答

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

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

其他回答

POJO(普通的旧Java对象):POJO是普通的Java对象,除了Java语言强制的限制外,没有其他限制。

序列化:用于保存对象的状态并通过网络发送。它将对象的状态转换为字节流。我们可以通过称为反序列化的过程从字节流中重新创建Java对象。

使类实现java.io.Serializable接口。并使用ObjectOutputStream类的writeObject()方法实现序列化。

JavaBean类:它是一个特殊的POJO,有一些限制(或约定)。

实现序列化具有公共无参数构造函数所有财产都是私有的,使用公共getters和setter方法。

许多框架(如Spring)使用JavaBean对象。

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

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

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

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

JavaBeans是一种标准,其基本语法要求已由其他答案明确解释。

然而,IMO,它不仅仅是一个简单的语法标准。JavaBeans的真正含义或预期用途是,与围绕标准的各种工具支持一起,促进代码重用和基于组件的软件工程,即使开发人员能够通过组装现有组件(类)来构建应用程序,而无需编写任何代码(或只需编写少量粘合代码)。不幸的是,这项技术被业界低估和利用不足,从本主题的答案中可以看出这一点。

如果您阅读Oracle的JavaBeans教程,您可以更好地理解这一点。

JavaBean是满足以下三个条件的任何Java类:

它应该实现可序列化接口(Marker接口)。构造函数应该是公共的,并且没有参数(其他人称之为“无参数构造函数”)。它应该有getter和setter。

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

举例说明。

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