什么是 Java 豆?

2022-09-01 04:55:41

可能重复:
豆子有什么意义?

什么是爪哇豆?它的用途是什么?有哪些代码示例?我听说它用于与getter和setter方法有关的事情?我对Java Bean是什么以及您甚至在哪里访问它感到非常困惑。我用谷歌搜索了它,但找不到明确的答案。


答案 1

Java Bean 是一个普通的 Java 类,它具有私有属性及其公共 getter 和 setter 方法。

Java Bean通常用作帮助器类。

示例 -

public class User implements java.io.Serializable {

    private String name;
    private Integer age;

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name = name;
    }

    public Integer getAge(){
        return this.age;
    }

    public void setAge(Integer age){
        this.age = age;
    }
}

实现不是强制性的,但如果你想在Java的内存之外持久化或传输Javabean,例如在硬盘中或通过网络,实现是非常有用的。Serializable

使用JavaBean的地方?


答案 2

JavaBeans是Java的可重用软件组件。实际上,它们是用Java编程语言编写的符合特定约定的类。它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个bean对象而不是作为多个单独的对象传递。JavaBean 是一个可序列化的 Java 对象,具有 0 参数构造函数,并允许使用 getter 和 setter 方法访问属性。

优势

  • Bean 获得了 Java 的“一次编写,随处运行”范式的所有好处。
  • 可以控制向另一个应用程序公开的 Bean 的属性、事件和方法。
  • 可以提供辅助软件来帮助配置 Bean。
  • Bean 的配置设置可以保存在持久性存储器中,并且可以在以后恢复。
  • Bean 可以注册以接收来自其他对象的事件,并可以生成发送到它的事件。

  • 具有空构造函数的类可能会在无效状态下进行实例化。如果这样的类是由开发人员手动实例化的(而不是由某种框架自动实例化的),则开发人员可能没有意识到他已经在无效状态下实例化了该类。编译器无法检测到这样的问题,即使它被记录下来,也不能保证开发人员会看到文档。
  • 必须为每个属性创建一个 getter,并为许多、大多数或全部创建一个 setter,这会产生大量的样板代码。

例:

package beans;

/**
 * Class <code>PersonBean</code>.
 */
public class PersonBean implements java.io.Serializable {

    private String name;

    private boolean deceased;
    static final long serialVersionUID = 1L;

    /** No-arg constructor (takes no arguments). */
    public PersonBean() {
    }

    /**
     * Property <code>name</code> (note capitalization) readable/writable.
     */
    public String getName() {
        return this.name;
    }

    /**
     * Setter for property <code>name</code>.
     * @param name
     */
    public void setName(final String name) {
        this.name = name;
    }

    /**
     * Getter for property "deceased"
     * Different syntax for a boolean field (is vs. get)
     */
    public boolean isDeceased() {
        return this.deceased;
    }

    /**
     * Setter for property <code>deceased</code>.
     * @param deceased
     */
    public void setDeceased(final boolean deceased) {
        this.deceased = deceased;
    }
}

参考 http://en.wikipedia.org/wiki/JavaBeans

根据@Andy的评论,我接受我们应该声明serialVersionUID。根据 Java 文档

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members. Array classes cannot declare an explicit serialVersionUID, so they always have the default computed value, but the requirement for matching serialVersionUID values is waived for array classes.

如果您没有显式指定 serialVersionUID,则会自动生成一个值 - 但这是脆弱的,因为它依赖于编译器实现。


推荐